c ++的新手并且很困惑。我查找了几十个类似的问题,每个解决方案都是添加#pragma once
或#ifndef/#define/#endif
,但对我来说似乎并非如此。我有一个tic tac toe board源文件 tttBoard.cpp ,如下所示:
#include "stdafx.h"
#include "tttBoard.h"
#include <string>
class tttBoard {
enum sVal {sEmp,sX,sO};
sVal gBoard[3][3];
bool isX;
tttBoard::tttBoard() {
}
void Draw() {
}
void Move(int x, int y) {
}
char* getValue(int x, int y) {}
};
和相应的头文件 tttBoard.h :
#ifndef tttBoard_h
#define tttBoard_h
class tttBoard {
public:
tttBoard();
void Draw();
void Move(int x, int y);
char* getValue(int x, int y);
private:
enum sVal {
sEmp,
sX,
sO
};
sVal gBoard[3][3];
bool isX;
};
#endif
但是在编译时我遇到了以下错误:
tttboard.cpp(5): error C2011: 'tttBoard' : 'class' type redefinition
tttboard.h(4) : see declaration of 'tttBoard'
有什么想法吗?
答案 0 :(得分:1)
您在标头和实现文件中提供了类的定义。在.cpp中只包含标题。
答案 1 :(得分:1)
要实现该类,您不需要重新定义它。请在.cpp
文件中尝试以下操作。
#include "tttBoard.h"
tttBoard::tttBoard() {
}
void tttBoard::Draw() {
}
void tttBoard::Move(int x, int y) {
}
char* tttBoard::getValue(int x, int y) {}
您也无需重新声明enum sVal
或任何tttBoard
成员变量。它们应该在头文件中的原始声明中提供。 : - )
另外,请确保实现getValue
以实际返回某些内容。在完成这些功能的实现之前,您将无法编译。
阅读有关C ++类here的更多信息。
答案 2 :(得分:0)
我认为您正在尝试定义类方法,并最终在.cpp文件中重新声明类本身。
函数的定义应如下所示:.cpp文件:
tttBoard::tttBoard() {
}
void tttBoard::Draw() {
}
void tttBoard::Move(int x, int y) {
}
char* tttBoard::getValue(int x, int y) { return ...; }
请注意,您不必再次提及.cpp文件中的非静态数据成员和枚举等。
声明和定义可以仅在功能的单独部分中使用。