c++ - 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 文件中存在第二个错误,表示在此上下文中无法访问对象。
我发现很多人都缺少右括号,但没有关于缺少左括号的事情。
谢谢你的帮助
解决方案
您的 ctor-initialiser 继续构造函数的定义,而不是声明。
你混淆了编译器,通过[有效地]编写一个定义(它必须是一个定义,因为它上面有 ctor-initialiser)没有{}
(因为你的意思是它是一个声明)......然后稍后提供 [another] 定义.
推荐阅读
- php - Laravel 集合不能使用箭头函数在地图内递增
- algorithm - 弗洛伊德循环检测在 O(n) 时间和 O(1) 空间中重复的数字
- sql - 使用绑定变量时的 SQL 无效标识符
- c++ - MQTT 客户端未订阅给定主题(或回调未按预期工作)
- c++ - Openssl客户端证书ocsp装订在客户端
- postgrest - PostgREST 事务
- python-3.x - 从熊猫数据框中按点拆分列
- firefox-developer-tools - Firefox-Developer-Tools - 网络选项卡 - 图像 - 'initiator' 列中的 'imageset' 和 'vendors-main.chunk' 是什么意思
- amazon-web-services - 仅允许在 AWS S3 中公开访问图像
- mongoose - 命名自定义验证器