在完成我的游戏原型时,我遇到了这个错误,我以前从未见过它.我试图将两个.cpp文件链接在一起,这个:
#include#include "mage.h" #include "Warrior.h" #include "Rogue.h" #include "CharacterType.h" #include #include #include "Inventory.h" #include "blankEnemy.h" #include "Enemy.h" #include "Boss.h" #include #include #include "DeathMenu.h" #include "GameStart.h" #include "FirstPhase.h" #include #include "SecondPhase.h" #include "PhaseOnePT2.h" using namespace std; int FirstPhase(blankCharacter* myCharacter, blankEnemy* myEnemy, Inventory* myInventory, blankEnemy* myBoss) { //code }
对此:int GameStart(){
std::shared_ptrmyCharacter; std::unique_ptr myEnemy; std::unique_ptr myInventory; std::unique_ptr 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 (new Mage(20,40,60,70,100,180,60)); myInventory = std::unique_ptr (new Inventory(3, 3,3)); myEnemy = std::unique_ptr (new Enemy(150, 60, 150)); myBoss = std::unique_ptr (new Enemy(200, 200, 200)); //choice = FirstPhase(); case 2: //Warrior Beep(262,500); myCharacter = std::unique_ptr (new Warrior(40,50,65,100,160,100,60)); myInventory = std::unique_ptr (new Inventory(3, 3, 3)); myEnemy = std::unique_ptr (new Enemy(150, 60, 150)); myBoss = std::unique_ptr (new Enemy(200, 200, 200)); choice = FirstPhase(myCharacter, myEnemy, myInventory, myBoss); break; case 3: //Rogue Beep(262,500); myCharacter = std::unique_ptr (new Rogue(30,55,70,90,160,100,100)); myInventory = std::unique_ptr (new Inventory(3, 3, 3)); myEnemy = std::unique_ptr (new Enemy(150,60,150)); myBoss = std::unique_ptr (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#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());
更好的是,更改您的函数以接受引用而不是指针(或者它是否正确处理传入的空值?)并且只是取消引用调用站点处的指针.