gpt4 book ai didi

c++ - 两个语法错误 : Error C2143 syntax error: missing ';' before '*'

转载 作者:太空宇宙 更新时间:2023-11-03 10:41:15 25 4
gpt4 key购买 nike

所以我有一些语法错误:

Error C2143 syntax error: missing ';' before '* '  
Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int
Error C2238 unexpected token(s) preceding ';'
Error C2143 syntax error: missing ';' before '*'

所有这些都在:

#pragma once  
#include "World.h"
class Organism
{
protected:
int strength;
int initiative;
int age, x, y;
char sign;
World *world; //line that makes errors
public:
Organism(World*,int,int);
virtual ~Organism();
virtual void action() = 0;
virtual void collision() = 0;
virtual char getSign() = 0;
};

我也有这些错误(是的,两次相同的错误):

Error   C2061   syntax error: identifier 'World'
Error C2061 syntax error: identifier 'World'

符合 Organism(World*,int,int); (我不知道如何在 StackOverflow 上添加行号)。什么会导致这些问题?

这是 World.h 代码:

#pragma once
#include "Organism.h"
class World
{
int height;
int width;
Organism*** organisms;
public:
World();
World(int, int);
~World();
void DrawWorld();
void NextRound();
};

最佳答案

这是因为"Organism.h"头文件依赖于"World.h"头文件,而"Organism.h" 等等无穷大。这就是所谓的循环依赖

在你的情况下,它很容易被破坏,因为正如你展示的那样,头文件都不需要其他类的定义,只需要声明

这意味着 World.h 头文件可以如下所示:

#pragma once
// Note: No #include directive here
class Organism; // Forward-declaration of the class
class World
{
int height;
int width;
Organism*** organisms;
public:
World();
World(int, int);
~World();
void DrawWorld();
void NextRound();
};

同样可以用 Organism.h 头文件来完成。

使用类的源文件需要类的完整定义,因此它们需要包含两个头文件。

关于c++ - 两个语法错误 : Error C2143 syntax error: missing ';' before '*' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36663993/

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