繁体   English   中英

预期在';'之前的主表达式错误 代币

[英]error expected primary-expression before ';' token

您好,我对此代码有疑问

装甲

#ifdenf armor
#define armor
class Armor {

private:
    int m_weight;

public:
    Armor(int weight);

};
#endif

骑士

#ifndef knight
#define knight

#include "Armor.h"
class Knight {
private:
    Armor* m_armor;
    string m_name;
    int m_strength;

public:
    Knight(string name, int strength);

    void setArmor(Armor* armor);
};
#endif

骑士

#include "Knight.h"
void Knight::setArmor(Armor* armor){
    m_armor = armor; // error occurred

}

错误:错误:“;”之前的预期主表达式 代币

感谢帮助

#define armor

现在,您不能在任何包含此标头的源文件中使用armor名称。 预处理器将其删除。

m_armor = armor; // error occurred

哎呀! 预处理器将其转换为

m_armor = ;

我建议将ALL_CAPS的约定用于宏,而不要用于其他任何宏,这样它们就不会影响常规代码。 您可能还会考虑#pragma once而不是基于宏的include防护,尽管不能保证可移植性。

不要忘了用分号结束您的Knight职业宣言!

(出于兴趣,这在C ++中是必需的,而不是在Java中)。

您确实需要包括警卫。

编辑

假设对问题的编辑(包括后卫)实际上按如下方式使用armor

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

然后,您尝试使用armor作为变量名。 尝试

#ifndef ARMOR_INCLUDED
#define ARMOR_INCLUDED
//...
#endif

代替

结束编辑

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

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

public:
    Knight(string name, int strength);

    void setArmor(Armor* armor);
}; //<----------

通常,如果在一行上出现有关语法的编译错误,看起来不错,请向后工作以查看是否有更早的原因导致此错误。

Knight.h ,类定义缺少;

class Knight {
    ...
};

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM