包含:stdafx.h 和 <vector> VisualStudio 2012 C++ 之间的冲突(错误 C2953:已定义类模板)

Conflict between includes: stdafx.h and <vector> VisualStudio 2012 C++ (error C2953: class template has already been defined)

本文关键字:C2953 冲突 错误 定义 C++ lt stdafx vector gt 包含 2012      更新时间:2023-10-16

我在这个问题上纠缠太久了,必须问全能的Stack。请原谅问题的简单性!

我正在VisualStudio2012中开发BowlingGame卡塔,以便练习他们版本的单元测试。我正在进行测试#2的重构部分,在那里我将一个向量添加到我的Game类中,以保存滚动的引脚数量。

然而,当我把向量include添加到我的头中时,我得到了一个编译器错误!事实上,抛出编译器错误的是我的单元测试类(而不是我的源代码)。

我认为问题是单元测试类中的stdafx.h include和源代码头中的vector include之间的冲突,但我不确定。它也可能是一个托管/本机C++问题?在这次练习中,我不得不完成其中的一些。

以下是编译器错误(缩写为,因为它一直在继续)和到目前为止我的三个文件的代码。请让我知道我能做些什么来克服这个问题。我正在尝试使用"最佳实践"进行这项练习,所以如果你看到任何其他看起来可疑的东西,请告诉我!

1>------ Build started: Project: BowlingGameUnitTests, Configuration: Debug Win32 ------
1>  BullseyeCoverage Compile C++ 8.7.21 Windows License 7978 
1>  Copyright (c) Bullseye Testing Technology 1990-2012
1>CL : Command line warning d9999: changing /clr:safe to -clr
1>  BowlingGameTest.cpp
1>c:/Program Files (x86)/Microsoft Visual Studio 11.0/VC/include/xrefwrap(156): warning C4561: '__fastcall' incompatible with the '/clr' option: converting to '__stdcall'
1>c:/Program Files (x86)/Microsoft Visual Studio 11.0/VC/include/xrefwrap(156): error C2953: 'std::_Result_of<_Ret(__stdcall &)(void),std::_Nil,std::_Nil,std::_Nil,std::_Nil,std::_Nil,std::_Nil,std::_Nil,std::_Nil>' : class template has already been defined
1>          c:/Program Files (x86)/Microsoft Visual Studio 11.0/VC/include/xrefwrap(156) : see declaration of 'std::_Result_of<_Ret(__stdcall &)(void),std::_Nil,std::_Nil,std::_Nil,std::_Nil,std::_Nil,std::_Nil,std::_Nil,std::_Nil>'
1>c:/Program Files (x86)/Microsoft Visual Studio 11.0/VC/include/xrefwrap(156): error C2953: 'std::_Result_of<_Ret(__stdcall *)(void),std::_Nil,std::_Nil,std::_Nil,std::_Nil,std::_Nil,std::_Nil,std::_Nil,std::_Nil>' : class template has already been defined
1>          c:/Program Files (x86)/Microsoft Visual Studio 11.0/VC/include/xrefwrap(156) : see declaration of 'std::_Result_of<_Ret(__stdcall *)(void),std::_Nil,std::_Nil,std::_Nil,std::_Nil,std::_Nil,std::_Nil,std::_Nil,std::_Nil>'

游戏.h:

#pragma once
#include <vector>
using namespace std;
class Game
{
public:
Game(void);
~Game(void);
void roll( int pins );
int score();
private:
int totalScore;
vector<int> rolls;
int currentRoll;
};

Game.cpp:

#include "stdafx.h"
#include "Game.h"
Game::Game(void)
{
totalScore = 0;
currentRoll = 0;
}
Game::~Game( void )
{
}
void Game::roll( int pins )
{
totalScore += pins;
rolls.push_back(pins);
}
int Game::score()
{
return totalScore;
}

保龄球游戏测试.cpp:

#include "stdafx.h"
#include "../BowlingGame/Game.h"
using namespace System;
using namespace System::Text;
using namespace System::Collections::Generic;
using namespace Microsoft::VisualStudio::TestTools::UnitTesting;
namespace BowlingGameUnitTests
{
[TestClass]
public ref class BowlingGameTest
{
private:
Game* game;
public: 
[TestInitialize()]
void MyTestInitialize() 
{
game = new Game();
}
void rollMany( int frames, int pins ) 
{
for (int i = 0; i < frames; i++)
{
game->roll(pins);
}
}
[TestMethod]
void gutterGame()
{
rollMany(20, 0);
Assert::AreEqual<int>(0, game->score());
}
[TestMethod]
void testAllOnes()
{
rollMany(20, 1);
Assert::AreEqual<int>(20, game->score());
}
};
}

感谢pstrjds!

回答第1部分:将std::vector更改为cliext vector,因为我的单元测试项目是一个C++/CLI项目。

回答第2部分:重新配置解决方案。目前,它是本机源代码和托管单元测试,但这会导致很多小问题。将更改为本机源代码和本机单元测试。