我在这个问题上卡了太久,必须问全能的 Stack。请原谅问题的简单性!
我正在使用 VisualStudio 2012 中的 BowlingGame kata 来练习他们的单元测试版本。我在测试#2 的重构部分的中间,我在我的 Game 类中添加了一个向量,以保存滚动的引脚数。
然而,当我将向量包含添加到我的头文件时,我得到了一个编译器错误!事实上,是我的单元测试类引发了编译器错误(不是我的源代码)。
我认为问题是单元测试类中的 stdafx.h 包含与源代码标头中的向量包含之间的冲突,但我不确定。它也可能是托管/本机 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;
};
游戏.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;
}
BowlingGameTest.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());
}
};
}