0

我目前正在玩 C++,并尝试重建我用 C++ 制作的井字游戏批处理控制台游戏,但遇到了障碍,我无法弄清楚如何摆脱错误TicTacToe.obj : error LNK2005: "class computer comp" (?comp@@3Vcomputer@@A) already defined in computer.obj。我尝试从标头中删除函数计算机的声明,以及 C++ 中函数的定义,但这并没有解决错误。我弄清楚如何删除此错误的唯一方法是删除对象名称,我有点不想这样做。我使用网站http://www.cplusplus.com/doc/tutorial/classes/上给出的示例来设置班级计算机。非常欢迎您提供有关我当前遇到的任何错误或我可能不需要的任何功能的任何信息,因为我想了解更多关于 C++ 的信息。

代码:

井字游戏.cpp

// TicTacToe.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <Windows.h>
#include "computer.h"
#include <iostream>
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
    comp.Select();
    Sleep(1000);
}

计算机.cpp

#include "stdafx.h"
#include "computer.h"
#include <iostream>
using namespace std;

computer::computer()
{
}

computer::~computer()
{
}

void computer::Select()
{
}

电脑.h

#pragma once
class computer
{
public:
    computer();
    ~computer();
    void Select(void);
} comp;

额外信息:

我在运行 Windows 7 的笔记本电脑上使用 Microsoft Visual Studio Professional 2013。

4

3 回答 3

1

"computer.h"当您在两个模块中computer.cpp包含标题时,两个模块TicTacToe.cpp都包含相同的对象定义comp

pragma once
class computer
{
public:
    computer();
    ~computer();
    void Select(void);
} comp;

所以链接器发出错误。

仅在一个 cpp 模块中定义对象。标头应仅包含类定义。

例如

电脑.h

#pragma once
class computer
{
public:
    computer();
    ~computer();
    void Select(void);
};

井字游戏.cpp

// TicTacToe.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <Windows.h>
#include "computer.h"
#include <iostream>
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
    computer comp;

    comp.Select();
    Sleep(1000);
}
于 2014-06-01T12:31:28.463 回答
0

You have to remove comp from the header file. Create the object in a cpp file like this:

computer comp;

You said you don't want to do that. If that causes some other problem for you then post a new question about that problem.

于 2014-06-01T12:45:38.653 回答
0

comp在标头中进行定义,因此在包含该标头的每个 .cpp 中进行定义,因此您违反了单一定义规则。

相反,您可以在标题中声明它:

extern computer comp;

然后在一个 .cpp 中定义它:

computer comp;

这仍然允许您从包含标头的任何 .cpp 访问它。

于 2014-06-01T13:51:54.697 回答