C++ 在';之前预期的主表达式出错';代币

C++ 在';之前预期的主表达式出错';代币,c++,C++,你好,我有这个代码的问题 装甲.h 骑士.h Knight.cpp 错误:错误:应在“;”之前使用主表达式代币 感谢您的帮助别忘了用分号关闭您的骑士类声明 (出于兴趣,这是C++所必需的,而不是java)。< / P> < P>不要忘记用分号关闭 KNT/Obj>类声明! (出于兴趣,这是C++所必需的,而不是java)。 < P> >代码> KND.H.//CUT>类定义缺少“代码”;代码>: class Knight { ... }; 没有以下标记被解释为符号。在代码(Knight

你好,我有这个代码的问题

装甲.h

骑士.h

Knight.cpp

错误:错误:应在“;”之前使用主表达式代币


感谢您的帮助

别忘了用分号关闭您的
骑士
类声明


(出于兴趣,这是C++所必需的,而不是java)。< / P> < P>不要忘记用分号关闭<代码> KNT/Obj>类声明!


(出于兴趣,这是C++所必需的,而不是java)。

< P> >代码> KND.H.//CUT>类定义缺少“代码”;代码>:

class Knight {
    ...
};

没有
以下标记被解释为符号。在代码(
Knight.cpp
)中,它是紧跟在include指令之后的代码
void
不是合法符号,这会触发错误。

Knight.h
中,类定义缺少一个

class Knight {
    ...
};

没有
以下标记被解释为符号。在代码(
Knight.cpp
)中,它是紧跟在include指令之后的代码<代码>无效
不是合法符号,这会触发错误。

您确实需要包含防护装置

编辑

假设对问题进行编辑,给出了include-guards实际使用的
armor
,如下所示

#ifdenf armor //<<--- ARE YOU POSTING THE ACTUAL CODE... try #ifndef
#define armor
//...
#endif
反而

结束编辑

另外,class
Knight
需要一个尾随分号

class Knight {
private:
    Armor* m_armor;
    string m_name;
    int m_strength;

public:
    Knight(string name, int strength);

    void setArmor(Armor* armor);
}; //<----------
职业骑士{
私人:
装甲*m_装甲;
字符串m_name;
综合实力;
公众:
骑士(字符串名称,整数强度);
虚空护甲(护甲*护甲);

}; // 你需要包括警卫

编辑

假设对问题进行编辑,给出了include-guards实际使用的
armor
,如下所示

#ifdenf armor //<<--- ARE YOU POSTING THE ACTUAL CODE... try #ifndef
#define armor
//...
#endif
反而

结束编辑

另外,class
Knight
需要一个尾随分号

class Knight {
private:
    Armor* m_armor;
    string m_name;
    int m_strength;

public:
    Knight(string name, int strength);

    void setArmor(Armor* armor);
}; //<----------
职业骑士{
私人:
装甲*m_装甲;
字符串m_name;
综合实力;
公众:
骑士(字符串名称,整数强度);
虚空护甲(护甲*护甲);
}; //
现在,您不能在包含此头的任何源文件中使用名称
armor
。预处理器将删除它

m_armor = armor; // error occurred
哎呀!预处理器将其转换为

m_armor = ;
我建议对宏使用
ALL_CAPS
的约定,而不是对其他任何东西,这样它们就不能践踏常规代码。您也可以考虑SyApRigMA曾经而不是基于宏的包含保护,尽管这不能保证是可移植的。 现在,您不能在包含此头的任何源文件中使用名称
armor
。预处理器将删除它

m_armor = armor; // error occurred
哎呀!预处理器将其转换为

m_armor = ;

我建议对宏使用
ALL_CAPS
的约定,而不是对其他任何东西,这样它们就不能践踏常规代码。您也可以考虑SyPrimMA一次/<代码>,而不是基于宏的包含保护,虽然这不能保证是可移植的。在Knight类定义之后。使用更好的编译器:
错误:应为“;”课后
(同样,如上所述,你应该用include-guard保护你的标题不被多个包含)编辑后(这表明你没有发布真正的代码开始…:
#定义装甲
,然后再
m\u armor=armor
,你没看到问题吗?“你好,我对这段代码有问题”--比如它可能无法编译,因为第一行是非法的?如前所述,发布你正在编译的真实代码,而不是编造可能有不同错误的东西;在Knight类定义之后。使用更好的编译器:
错误:应为“;”课后
(同样,如上所述,你应该用include-guard保护你的标题不被多个包含)编辑后(这表明你没有发布真正的代码开始…:
#定义装甲
,然后再
m\u armor=armor
,你没看到问题吗?“你好,我对这段代码有问题”--比如它可能无法编译,因为第一行是非法的?如前所述,发布您正在编译的真实代码,而不是可能有不同错误的虚构内容。您是否发布了导致错误的代码?它在我的机器上工作。我去除了一些垃圾,但它只是变量和两个虚拟函数。“垃圾”一定是导致问题的原因,然后-用代码更正问题,这些代码实际上导致了机器上的问题。您是否发布了导致错误的确切代码?它在我的机器上工作。我去除了一些垃圾,但它只是变量和两个虚拟函数。那么“垃圾”一定是导致问题的原因-用代码更正问题,这实际上导致了你机器上的问题。非常感谢!!这对我和它的工作真的很有帮助:)再次感谢道德-发布给出错误的实际代码,然后你会很快得到答案。使用可能在代码中使用的包含标识符显然是(或者应该是)一种不好的做法。尝试类似于
#ifndef ARMOR\u HEADER\u FILE\u INCLUDE\u GUARD
。。。或者#pragma once,它现在可以用于所有主要的实现。非常感谢!!这对我和它的工作真的很有帮助:)再次感谢道德-发布给出错误的实际代码,然后你会很快得到答案。使用可能在代码中使用的包含标识符显然是(或者应该是)一种不好的做法。尝试类似于
#ifndef ARMOR\u HEADER\u FILE\u INCLUDE\u GUARD
。。。或者#pragma once,它现在适用于所有主要的实现。