[英]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.