首页 > 解决方案 > c ++预期的左大括号以及重新定义错误

问题描述

所以我试图在 .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 文件中存在第二个错误,表示在此上下文中无法访问对象。

我发现很多人都缺少右括号,但没有关于缺少左括号的事情。

谢谢你的帮助

标签: c++oopinheritance

解决方案


您的 ctor-initialiser 继续构造函数的定义,而不是声明

你混淆了编译器,通过[有效地]编写一个定义(它必须是一个定义,因为它上面有 ctor-initialiser)没有{}(因为你的意思是它是一个声明)......然后稍后提供 [another] 定义.


推荐阅读