C++ 和 Xcode 中的重复符号错误
Duplicate symbol error in C++ and Xcode
我正在尝试声明一个用作枚举的 class。但是如果我多次包含它,我会得到几个 "duplicated symbol" 错误。
这是我的 ItemType.h
文件
#ifndef DarkSnake_ItemType_h
#define DarkSnake_ItemType_h
#define COLOR_ITEM_1 0xffff00ff
#define COLOR_ITEM_2 0xffff03ff
#define COLOR_ITEM_3 0xffff06ff
class ItemType {
public:
static const ItemType NONE;
static const ItemType ITEM_1;
static const ItemType ITEM_2;
static const ItemType ITEM_3;
static ItemType values[];
static ItemType getItemTypeByColor(const int color) {
for (int i = 0; 3; i++) {
if (color == values[i].getItemColor()) {
return values[i];
}
}
return NONE;
}
bool operator ==(const ItemType &item) const;
bool operator !=(const ItemType &item) const;
int getItemColor() { return this->color; };
private:
const int color;
ItemType(const int _color) : color(_color) {}
};
bool ItemType::operator == (const ItemType &item) const {
return this->color == item.color;
}
bool ItemType::operator != (const ItemType &item) const {
return this->color != item.color;
}
#endif
这是我的 ItemType.cpp
:
#include "ItemType.h"
const ItemType ItemType::NONE = ItemType(0);
const ItemType ItemType::ITEM_1 = ItemType(COLOR_ITEM_1);
const ItemType ItemType::ITEM_2 = ItemType(COLOR_ITEM_2);
const ItemType ItemType::ITEM_3 = ItemType(COLOR_ITEM_3);
ItemType ItemType::values[] = {ItemType::ITEM_1, ItemType::ITEM_2, ItemType::ITEM_3};
我第一次尝试将 C++ 代码放入头文件中,但我遇到了同样的错误。但是现在我不知道我做错了什么。
你能帮帮我吗?
非常感谢!
您不能在头文件中的 class 之外定义非 inline
函数。
要解决这个问题,你有三种可能:
- 将
operator==
和 operator!=
的定义移动到 class 定义中。
- 将定义移动到
ItemType.cpp
。
- 声明函数
inline
。
我正在尝试声明一个用作枚举的 class。但是如果我多次包含它,我会得到几个 "duplicated symbol" 错误。
这是我的 ItemType.h
文件
#ifndef DarkSnake_ItemType_h
#define DarkSnake_ItemType_h
#define COLOR_ITEM_1 0xffff00ff
#define COLOR_ITEM_2 0xffff03ff
#define COLOR_ITEM_3 0xffff06ff
class ItemType {
public:
static const ItemType NONE;
static const ItemType ITEM_1;
static const ItemType ITEM_2;
static const ItemType ITEM_3;
static ItemType values[];
static ItemType getItemTypeByColor(const int color) {
for (int i = 0; 3; i++) {
if (color == values[i].getItemColor()) {
return values[i];
}
}
return NONE;
}
bool operator ==(const ItemType &item) const;
bool operator !=(const ItemType &item) const;
int getItemColor() { return this->color; };
private:
const int color;
ItemType(const int _color) : color(_color) {}
};
bool ItemType::operator == (const ItemType &item) const {
return this->color == item.color;
}
bool ItemType::operator != (const ItemType &item) const {
return this->color != item.color;
}
#endif
这是我的 ItemType.cpp
:
#include "ItemType.h"
const ItemType ItemType::NONE = ItemType(0);
const ItemType ItemType::ITEM_1 = ItemType(COLOR_ITEM_1);
const ItemType ItemType::ITEM_2 = ItemType(COLOR_ITEM_2);
const ItemType ItemType::ITEM_3 = ItemType(COLOR_ITEM_3);
ItemType ItemType::values[] = {ItemType::ITEM_1, ItemType::ITEM_2, ItemType::ITEM_3};
我第一次尝试将 C++ 代码放入头文件中,但我遇到了同样的错误。但是现在我不知道我做错了什么。
你能帮帮我吗?
非常感谢!
您不能在头文件中的 class 之外定义非 inline
函数。
要解决这个问题,你有三种可能:
- 将
operator==
和operator!=
的定义移动到 class 定义中。 - 将定义移动到
ItemType.cpp
。 - 声明函数
inline
。