C++ 两个语法错误:错误C2143语法错误:缺少'';在'之前*';
所以我有几个语法错误,它们是:C++ 两个语法错误:错误C2143语法错误:缺少'';在'之前*';,c++,C++,所以我有几个语法错误,它们是: 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 ';' befor
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;
};
我也有这些错误(是的,两次相同的错误):
与生物体一致(世界*,国际,国际);(我不知道如何在StackOverflow上添加行号)。什么会导致这些问题
这是世界。h代码:
#pragma once
#include "Organism.h"
class World
{
int height;
int width;
Organism*** organisms;
public:
World();
World(int, int);
~World();
void DrawWorld();
void NextRound();
};
这是因为“organic.h”
头文件依赖于“World.h”
头文件,而该头文件依赖于“organic.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();
};
对于organic.h
头文件也可以这样做
使用类的源文件需要类的完整定义,因此它们需要同时包含两个头文件。这是因为的“organic.h”
头文件依赖于的“World.h”
头文件,而头文件依赖于的“organic.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();
};
对于organic.h
头文件也可以这样做
使用类的源文件需要类的完整定义,因此它们需要包含两个头文件。您的问题是循环依赖关系。这反映在您的头文件中,每个头文件都包含彼此,World
的定义取决于organic
的定义,后者取决于World
的定义
(非标准)#pragma once
可能会阻止头文件无限地相互包含,但不会改变其中定义的类型具有递归依赖性这一事实
你需要打破依赖关系。一种常见的技术是使用前向声明,避免(至少)一个头依赖另一个头,并使用声明来打破类之间的依赖关系
#ifndef ORGANISM_H_INCLUDED // include guard instead of #pragma once
#define ORGANISM_H_INCLUDED
class World; // declaration of World
class Organism
{
// as you have it
};
#endif
及
需要认识到的重要一点是,给定一个类声明(而不是定义),只能使用指针或引用
要实现依赖于两个完整类定义知识的两个类的成员函数,您需要#包括两个头。基于此,您的代码将能够创建任意类型的实例。您的问题是循环依赖关系。这反映在您的头文件中,每个头文件都包含彼此,World
的定义取决于organic
的定义,后者取决于World
的定义
(非标准)#pragma once
可能会阻止头文件无限地相互包含,但不会改变其中定义的类型具有递归依赖性这一事实
你需要打破依赖关系。一种常见的技术是使用前向声明,避免(至少)一个头依赖另一个头,并使用声明来打破类之间的依赖关系
#ifndef ORGANISM_H_INCLUDED // include guard instead of #pragma once
#define ORGANISM_H_INCLUDED
class World; // declaration of World
class Organism
{
// as you have it
};
#endif
及
需要认识到的重要一点是,给定一个类声明(而不是定义),只能使用指针或引用
要实现依赖于两个完整类定义知识的两个类的成员函数,您需要#包括两个头。基于此,您的代码将能够创建任意类型的实例。祝贺您,您是三星级程序员Congregations,您是三星级程序员