【问题标题】:Cannot convert parameter 1 from std::shared_ptr <_Ty> (??)无法从 std::shared_ptr <_Ty> 转换参数 1 (??)
【发布时间】:2014-01-10 12:43:14
【问题描述】:

在完成我的游戏原型时,我遇到了这个错误,我以前从未见过它。 我试图将两个 .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
    }

对此: 诠释游戏开始() {

    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>”转换为“blankCharacter *” 周围

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

没有从 shared_ptr<_ty> 到 *blankCharacter 的合适转换存在'? 我不知道如何解决它。

【问题讨论】:

  • 顺便说一句,您应该发布完整的错误。在那里的某个地方,它还说明了_Ty 的含义。

标签: c++


【解决方案1】:

C++11 智能指针不提供与原始指针类型之间的自动转换(出于安全原因)。使用get():

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

更好的是,将您的函数更改为接受引用而不是指针(或者它是否正确处理传入的空值?)并在调用站点取消引用指针。

【讨论】:

    【解决方案2】:

    您应该使用get() 来提取底层指针或更改原型以在函数调用中使用智能指针:

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

    【讨论】:

      猜你喜欢
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 2011-04-14
      • 1970-01-01
      • 2017-06-19
      • 2020-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多