Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 两个语法错误:错误C2143语法错误:缺少'';在'之前*';_C++ - Fatal编程技术网

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,您是三星级程序员