c++ 将值传递给接受指针参数的构造函数[closed]

p3rjfoxz  于 2022-11-27  发布在  其他
关注(0)|答案(1)|浏览(179)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题吗?**通过editing this post添加详细信息并阐明问题。

23天前关闭。
Improve this question
我是C新手,我正在尝试初始化一个名为Room的对象,GameObject类的构造函数将pointers作为初始化字段的参数。但我一直收到错误消息,称“没有匹配的构造函数用于初始化GameObject。谁能告诉我我犯了什么错?
对不起,如果这个问题的格式不好,我不习惯用多个头文件和源文件来问C
问题。但请也纠正我这一点。

游戏对象

GameObject::GameObject(string* _name, string* _description, char* _keyWord):
name(_name), description(_description), keyWord(_keyWord){
}

房间

//error!, "No matching constructor for initialization..."
    gameObjects[0] = new GameObject("knife", "a knife", 'k'); 
    gameObjects[1] = new GameObject("sword", "a sword", 's'); 

};
pftdvrlh

pftdvrlh1#

好吧,你在GameObject构造器中:

GameObject::GameObject(string* _name, string* _description, char* _keyWord):
name(_name), description(_description), keyWord(_keyWord){}

你是通过指针接受两个字符串和一个字符串,所以你可能想通过引用接受它们,如下所示:

GameObject::GameObject(string& _name, string& _description, char _keyWord):
name(_name), description(_description), keyWord(_keyWord){}

这样很好。
例如,以这个程序为例:

#include<iostream>
#include<string>

struct my_obj
{
    my_obj(std::string s, std::string s_, char c)
    : s__(s), s___(s_), char_(c) {}

    std::string s__{};
    std::string s___{};
    char char_{};
};

struct my_obj_2
{
    my_obj(std::string* s, std::string* s_, char* c)
    : s__(s), s___(s_), char_(c) {}

    std::string s__{};
    std::string s___{};
    char char_{};
};

int main()
{
    my_obj my_obj_1("Hello", "Goodbye", 'C'); // works fine

    my_obj_2 m_my_obj_2("Hello", "Goodbye", 'c'); // doesn't work fine
}

(1):这可以正常运作,因为它会找到相符的建构函式:
标准::字符串-〉标准::字符串
(2):然而,这并不能很好地工作,因为它是这样的转换:
标准::字符串-〉标准::字符串 *
总之,只要移除构造函数上的指针,如果你愿意,你可以像这样传递&const &

GameObject::GameObject(string& _name, string& _description, char _keyWord):
name(_name), description(_description), keyWord(_keyWord){}

相关问题