Невозможно преобразовать параметр 1 из std :: shared_ptr & lt; _Ty & gt; (??)

Завершая подготовку прототипа игры, я столкнулся с этой ошибкой, я никогда не видел ее раньше.
Я пытался связать вместе два файла .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»: невозможно преобразовать параметр 1 из «std :: shared_ptr»<_Ty> ‘to’ blankCharacter * ‘
Вокруг

  choice = FirstPhase(myCharacter, myEnemy, myInventory, myBoss);

Там нет подходящего преобразования из shared_ptr<_Ty> to * blankCharacter существует ‘?
Я не знаю, как это решить.

4

Решение

Интеллектуальные указатели C ++ 11 не предлагают автоматическое преобразование в необработанные типы указателей (из соображений безопасности). использование get():

choice = FirstPhase(myCharacter.get(), myEnemy.get(), myInventory.get(), myBoss.get());

Более того, измените вашу функцию так, чтобы она принимала ссылки вместо указателей (или она правильно обрабатывает переданное нулевое значение?) И просто разыменовывает указатели на сайте вызова.

9

Другие решения

Вы должны либо использовать get() чтобы извлечь базовый указатель или изменить прототип для использования умных указателей в вызовах функций:

choice = FirstPhase(myCharacter.get(), myEnemy.get(), myInventory.get(), myBoss.get());
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector