包含: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)
我在这个问题上纠缠太久了,必须问全能的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部分:重新配置解决方案。目前,它是本机源代码和托管单元测试,但这会导致很多小问题。将更改为本机源代码和本机单元测试。
相关文章:
- 写入位置0x0000000C时发生访问冲突
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 链表中写入访问冲突的未知原因
- C++中的openCV Mat访问冲突
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- C++尝试深度复制唯一指针时出现内存访问冲突
- 错误:使用通用引用的声明冲突
- 如何解决GTest和LibTorch联动冲突
- 两个运营商的一些奇怪的冲突<<
- 如何在多个线程中创建 QSql数据库连接时防止名称冲突
- C++ 中动态二维数组的访问冲突
- 从嵌套循环中的 std::list 中删除将返回访问冲突
- C++17 十六进制浮点文字单精度后缀冲突?
- 结构字段名称与 GDB 中的 STL 数组冲突
- 写入访问冲突异常
- C++ |匿名命名空间与命名空间 std 冲突
- 包含:stdafx.h 和 <vector> VisualStudio 2012 C++ 之间的冲突(错误 C2953:已定义类模板)