在完成我的游戏原型(prototype)时,我遇到了这个错误,我以前从未见过。 我试图将两个 .cpp 文件链接在一起,这个:
#include <iostream>
#include "mage.h"
#include "Warrior.h"
#include "Rogue.h"
#include "CharacterType.h"
#include <memory>
#include <string>
#include "Inventory.h"
#include "blankEnemy.h"
#include "Enemy.h"
#include "Boss.h"
#include <cstdlib>
#include <ctime>
#include "DeathMenu.h"
#include "GameStart.h"
#include "FirstPhase.h"
#include <Windows.h>
#include "SecondPhase.h"
#include "PhaseOnePT2.h"
using namespace std;
int FirstPhase(blankCharacter* myCharacter, blankEnemy* myEnemy, Inventory* myInventory, blankEnemy* myBoss)
{
//code
}
为此: int 游戏开始() {
std::shared_ptr<blankCharacter> myCharacter;
std::unique_ptr<blankEnemy> myEnemy;
std::unique_ptr<Inventory> myInventory;
std::unique_ptr<blankEnemy> myBoss;
string name;
int choice;
cout << "______________________________________________________________________________" << endl;
cout << "______________________________________________________________________________" << endl;
cout << "Your journey has only just begun" << endl;
cout << "______________________________________________________________________________" << endl;
cout << "______________________________________________________________________________" << endl;
cout << " Please enter player name." << endl << endl;
cin >> name;
system("cls");
cout << "______________________________________________________________________________" << endl;
cout << "______________________________________________________________________________" << endl;
cout << "Please select fighting class." << endl << endl;
cout <<" 1 - Mage, although not the physically strongest, mages offer a healing role" << endl;
cout <<" 2 - Warrior, the most balanced of all the classes, excelling in durability." << endl;
cout <<" 3 - Rogue, for players who want to take a more creative approach to battle." << endl;
cout << "______________________________________________________________________________" << endl;
cout << "______________________________________________________________________________" << endl;
cin >> choice;
switch(choice)
{
case 1: //Mage
Beep(262,500);
myCharacter = std::unique_ptr<blankCharacter>(new Mage(20,40,60,70,100,180,60));
myInventory = std::unique_ptr<Inventory>(new Inventory(3, 3,3));
myEnemy = std::unique_ptr<blankEnemy>(new Enemy(150, 60, 150));
myBoss = std::unique_ptr<blankEnemy>(new Enemy(200, 200, 200));
//choice = FirstPhase();
case 2: //Warrior
Beep(262,500);
myCharacter = std::unique_ptr<blankCharacter>(new Warrior(40,50,65,100,160,100,60));
myInventory = std::unique_ptr<Inventory>(new Inventory(3, 3, 3));
myEnemy = std::unique_ptr<blankEnemy>(new Enemy(150, 60, 150));
myBoss = std::unique_ptr<blankEnemy>(new Enemy(200, 200, 200));
choice = FirstPhase(myCharacter, myEnemy, myInventory, myBoss);
break;
case 3: //Rogue
Beep(262,500);
myCharacter = std::unique_ptr<blankCharacter>(new Rogue(30,55,70,90,160,100,100));
myInventory = std::unique_ptr<Inventory>(new Inventory(3, 3, 3));
myEnemy = std::unique_ptr<blankEnemy>(new Enemy(150,60,150));
myBoss = std::unique_ptr<blankEnemy>(new Enemy(200, 200, 200));
// choice = FirstPhase(myCharacter, myEnemy, myInventory, myBoss);
break;
default:
cout << "Please select a relevant value 1 to 3" << endl << endl;
break;
}
return 0;
};
我引用了 Firstphase();在标题中并将其放入 GameStart();
第一阶段.h:
#include "GameStart.h"
#include <string>
#include "CharacterType.h"
#include "mage.h"
#include "Rogue.h"
#include "Warrior.h"
using namespace std;
int FirstPhase(blankCharacter* myCharacter, blankEnemy* myEnemy, Inventory* myInventory, blankEnemy* myBoss);
但是我一直收到这个错误:
错误 C2664:“FirstPhase”:无法将参数 1 从“std::shared_ptr<_ty>”转换为“blankCharacter *” 左右
choice = FirstPhase(myCharacter, myEnemy, myInventory, myBoss);
没有从 shared_ptr<_ty> 到 *blankCharacter 的合适转换存在'? 我不知道如何解决它。
最佳答案
C++11 智能指针不提供与原始指针类型之间的自动转换(出于安全原因)。使用 get() :
choice = FirstPhase(myCharacter.get(), myEnemy.get(), myInventory.get(), myBoss.get());
更好的是,将您的函数更改为接受引用而不是指针(或者它是否正确处理传入的空值?)并且只是在调用站点取消引用指针。
关于c++ - 无法从 std::shared_ptr <_Ty> 转换参数 1 (??),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21044719/
这似乎应该有一个直截了当的答案,但在Google上花了很多时间,所以我找不到它。这可能是缺少正确关键字的情况。在我的RoR应用程序中,我有几个模型共享一种特定类型的字符串属性,该属性具有特殊验证和其他功能。我能想到的最接近的类似示例是表示URL的字符串。这会导致模型中出现大量重复(甚至单元测试中会出现更多重复),但我不确定如何让它更DRY。我能想到几个可能的方向...按照“validates_url_format_of”插件,但这只会让验证干给这个特殊的字符串它自己的模型,但这看起来很像重溶液为这个特殊的字符串创建一个ruby类,但是我如何得到ActiveRecord关联这个类模型
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在
exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby中使用两个参数异步运行exe吗?我已经尝试过ruby命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何rubygems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere
我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e
我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳