C++ 预期的左大括号以及重定义错误
c++ expected opening brace as well as redefinition error
所以我尝试在 .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 文件中,它可以工作,但我不想这样做。
我不确定这些是否与此有关,所以这里有一些更多信息:
字符是从对象继承的抽象类,玩家继承自角色。另外: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
}
你的 ctor-initialiser 使用构造函数的定义,而不是声明。
你混淆了编译器,通过[有效地]编写一个定义(它必须是一个定义,因为它上面有ctor-initialiser(没有{}
(因为你的意思是让它成为一个声明(......然后提供[另一个]定义。
相关文章:
- 使用命名空间时出现多个定义错误
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 尝试调用 .h 文件中定义的变量时出现变量未定义错误
- 在头文件和 cpp 文件中使用一次 #pragma 时出现结构重定义错误
- 链接阶段出现多重定义错误
- 避免模板类中的重定义错误
- 即使我没有包含多个文件,C++中的多个定义错误
- 跨多个类的全局变量而不会出现重定义错误?
- 尝试运行 wasm 函数时出现模块未定义错误
- C++ 预期的左大括号以及重定义错误
- C++:成员的越界声明必须是纯虚函数的定义错误
- c++中数组的未定义错误
- Visual C:模板类中的自定义错误消息
- 为什么C++模板不会导致多个定义错误?
- 只有一个定义/声明时标头声明变量的多堆定义错误
- C++ 在多个其他类中使用单个类 - 编译时出现多个定义错误
- 基类未定义.错误 C2504
- Q 斯坦达项重定义错误
- 可视化C++中的结构定义错误
- VC++ C2011 重定义错误 - 未使用的头文件