gpt4 book ai didi

C++ 预期左大括号以及重新定义错误

转载 作者:行者123 更新时间:2023-12-02 03:18:14 25 4
gpt4 key购买 nike

所以我尝试在 .h 文件中定义我的类并在 cpp 文件中编写构造函数,如下所示:

.h 文件:

class Player : protected Character{
public:
Player(sf::Vector2f starting_pos, std::list<Object *> *around) : Character(around);

.cpp 文件:

Player::Player(sf::Vector2f starting_pos, std::list<Object *> *around){
//code
}

现在编译器给出了这两个错误:

character.h:25:90: error: expected ‘{’ at end of input
25 | Player(sf::Vector2f starting_pos, std::list<Object *> *around) : Character(around);

character.cpp:3:1: error: redefinition of ‘Player::Player(sf::Vector2f, std::__cxx11::list<Object*>*)’
3 | Player::Player(sf::Vector2f starting_pos, std::list<Object *> *around){
| ^~~~~~

所以在我看来,它希望我在 .h 文件中定义代码,然后提示我没有在 .cpp 文件中这样做。如果我将代码直接放入 .h 文件中,它可以工作,但我不想这样做。

我不确定这些是否与此有关,所以这里有一些更多信息:

character是一个抽象类,继承自object,player继承自character。另外:cpp 文件中存在第二个错误,表明在此上下文中无法访问该对象。

我发现很多人缺少右大括号,但没有发现缺少左大括号。

感谢您的帮助

最佳答案

在你的头文件中你有

Player(sf::Vector2f starting_pos, std::list<Object *> *around) : Character(around);

这是导致错误的原因。由于您在那里使用初始值设定项列表,因此编译器期望完整的函数定义也在那里。只需从该行中删除 Character 的初始值设定项,并将其移至 C++ 文件中即可。

.h 文件

Player(sf::Vector2f starting_pos, std::list<Object *> *around);

.cpp 文件

Player::Player(sf::Vector2f starting_pos, std::list<Object *> *around) : Character(around) {
//code
}

关于C++ 预期左大括号以及重新定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59596026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com