无法从std :: shared_ptr <_Ty>转换参数1(??)

  发布于 2023-02-04 16:50

在完成我的游戏原型时,我遇到了这个错误,我以前从未见过它.我试图将两个.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_ptr myCharacter; 
    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的转换'?我不知道如何解决它.

1 个回答
  • C++ 11智能指针不提供与原始指针类型的自动转换(出于安全原因).用途get():

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

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

    2023-02-04 16:51 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有