C++ 如何在C++;
我正在尝试制作一个战锤40K陆军对抗程序,这样我就不必继续使用excel。我的问题是,我的程序出错,因为我有两个不同的对象,它们的头文件具有相同的变量名 当我试图运行我的程序时,g++抱怨变量已经在我的第一个对象中声明 我怎样才能避免这种情况发生 下面是SKulltaker.cpp程序的代码片段C++ 如何在C++;,c++,object,C++,Object,我正在尝试制作一个战锤40K陆军对抗程序,这样我就不必继续使用excel。我的问题是,我的程序出错,因为我有两个不同的对象,它们的头文件具有相同的变量名 当我试图运行我的程序时,g++抱怨变量已经在我的第一个对象中声明 我怎样才能避免这种情况发生 下面是SKulltaker.cpp程序的代码片段 #include "SkullTaker.h" #include <string> int pointCost = 140; int minSize = 1; int maxSize = 1
#include "SkullTaker.h"
#include <string>
int pointCost = 140;
int minSize = 1;
int maxSize = 1;
std::vector<std::string> rules;
#包括“SkullTaker.h”
#包括
int pointCost=140;
int minSize=1;
int maxSize=1;
向量规则;
这是盗墓者
class SkullTaker {
public:
SkullTaker();
SkullTaker(const SkullTaker& orig);
int getPointCost();
int getMinSize();
int getMaxSize();
std::vector<std::string> getRules();
std::string toString();
virtual ~SkullTaker();
};
职业窃贼{
公众:
盗贼();
骷髅人(const SkullTaker&orig);
int getPointCost();
int getMinSize();
int getMaxSize();
std::vector getRules();
std::string toString();
虚拟~SkullTaker();
};
我的另一个类是相同的,但是KuGath中.cpp和.h文件的名称是相同的
g++抱怨PointCost有多个定义
谢谢
dhoehna如果这是完整文件,则需要使用命名空间std的
代码>包含后的命令。鉴于您有一个名称空间问题,可能会解决它。。。如果所有编译器指令都正常(includes、ifdef、etc),那么类中的变量名之间应该不会有冲突
另外,类属性应该在头文件中声明,看起来这两个属性混淆了(或者这只是写问题时的一个错误)。如果这些值应该是常量,您可以在头文件中将它们声明为static const
,并在那里初始化它们,如果它们因实例而异,您应该在构造函数中初始化它们。使用“static”关键字,指示全局变量的范围应仅限于其转换单位
static int pointCost=140代码>使用“匿名”命名空间:
namespace {
int pointCost = 140;
int minSize = 1;
int maxSize = 1;
std::vector<std::string> rules;
}
//the code that uses these comes here.
名称空间{
int pointCost=140;
int minSize=1;
int maxSize=1;
向量规则;
}
//这里是使用这些的代码。
其中的所有内容将仅在该文件中可见。另一种选择——如果您只需要这些用于类定义——是将它们作为类的静态私有成员包括在内
class Skulltaker {
public:
...
private: /* I believe this initialization syntax is allowed in C++11
otherwise, initialize them in your .cpp file
like this: int Skulltaker::pointCost(140);*/
static int pointCost = 140;
static int minSize = 1;
static int maxSize = 1;
static std::vector<std::string> rules;
};
职业窃贼{
公众:
...
private:/*我相信这种初始化语法在C++11中是允许的
否则,在.cpp文件中初始化它们
如下所示:int Skulltaker::pointCost(140)*/
静态int pointCost=140;
静态int minSize=1;
静态int maxSize=1;
静态std::向量规则;
};
好吧,但这样想吧——现在你有了第一手经验,知道为什么人们总是告诉你如果可能的话不要使用全局变量(除了设计问题)。你是在使你的pointcost全局化,而不属于名称空间。您可以使它成为类的成员(private:int pointcost;),然后在构造函数的cpp中或任何设置pointcost=140的值中。
因为这实际上是一个看起来每个类都可以从一个叫做“WarHammerUnit”的基类派生出来的东西,所以它可以是那里的一个成员,你可以在构造函数中为每个单元设置它。你的头文件中有吗?这很有效。非常感谢你。当我不太累的时候,我会查找static关键字,看看它能做什么。