私はこの問題にあまりにも長い間悩まされてきたので、全能のスタックに尋ねなければなりません。問題の単純さを許してください!
私は VisualStudio 2012 の BowlingGame 型に取り組んでおり、単体テストのバージョンを練習しています。テスト #2 のリファクタリング セクションの途中です。このセクションでは、回転するピンの数を節約するために、Game クラスにベクトルを追加します。
しかし、ベクター インクルードをヘッダーに追加すると、コンパイル エラーが発生しました。実際、コンパイラ エラーをスローしているのは単体テスト クラスです (ソース コードではありません)。
この問題は、単体テスト クラスの stdafx.h インクルードとソース コード ヘッダーの vector インクルードとの間の競合であると考えていますが、よくわかりません。マネージ/ネイティブ C++ の問題である可能性もありますか? この演習では、それらのいくつかを処理する必要がありました。
以下は、コンパイラ エラー (延々と続くので省略) と、これまでの 3 つのファイルのコードです。この問題を乗り越えるために私にできることを教えてください。この演習では「ベスト プラクティス」を使用しようとしています。そのため、怪しいと思われるものを他に見つけた場合は、お知らせください。
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());
}
};
}