在完成我的游戏原型时,我遇到了这个错误,我以前从未见过它。 我试图将两个.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 GameStart() {
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();
FirstPhase.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':无法从'std :: shared_ptr&lt; _Ty&gt;'转换参数1 'blankCharacter *'
choice = FirstPhase(myCharacter, myEnemy, myInventory, myBoss);
没有合适的转化来自shared_ptr&lt; _Ty&gt; to * blankCharacter存在'? 我不知道如何解决它。
答案 0 :(得分:9)
C ++ 11智能指针不提供与原始指针类型的自动转换(出于安全原因)。使用get()
:
choice = FirstPhase(myCharacter.get(), myEnemy.get(), myInventory.get(), myBoss.get());
更好的是,将函数更改为接受引用而不是指针(或者它是否正确处理传入的空值?)并且只是取消引用调用站点上的指针。
答案 1 :(得分:1)
您应该使用get()
提取底层指针或更改原型以在函数调用中使用智能指针:
choice = FirstPhase(myCharacter.get(), myEnemy.get(), myInventory.get(), myBoss.get());