2016-07-14 9 views
0

Ich versuche, von Eclipse zu Visual Studio zu wechseln, da mir gesagt wurde, dass es einfacher für Anfänger ist und ich stimme meinem ersten Eindruck zu. Ich versuche, ein klassisches TicTacToe-Build mit Klassen nur als eine Testdatei zu erstellen, um ein Gefühl für die IDE zu bekommen, und ich erhalte 28 Fehler und 1 Warnung in Visual Studio im Vergleich zu keine Fehler und 1 Warnung in Eclipse ... Der Code ist genauso. Ich bin völlig verwirrt.Verschiedene IDEs erzeugen 0 Fehler im Vergleich zu 28 Fehlern

Um es klar zu sein kompiliert und läuft in Eclipse beim Empfangen von 28 Fehlern in Visual Studio.

Warum passiert das?

-Code unten

Fehlerliste

Severity Code Description Project File Line Suppression State 
Error C2065 'moveCounter': undeclared identifier TicTacToeWithClasses c:\users\tamend\documents\visual studio 2015\projects\tictactoewithclasses\tictactoewithclasses\tictactoeclassimp.cpp 167 
Error C2653 'TicTacToe': is not a class or namespace name TicTacToeWithClasses c:\users\tamend\documents\visual studio 2015\projects\tictactoewithclasses\tictactoewithclasses\tictactoeclassimp.cpp 10 
Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int TicTacToeWithClasses c:\users\tamend\documents\visual studio 2015\projects\tictactoewithclasses\tictactoewithclasses\tictactoeclassimp.cpp 11 
Error C2550 'TicTacToe': constructor initializer lists are only allowed on constructor definitions TicTacToeWithClasses c:\users\tamend\documents\visual studio 2015\projects\tictactoewithclasses\tictactoewithclasses\tictactoeclassimp.cpp 13 
Warning C4508 'TicTacToe': function should return a value; 'void' return type assumed TicTacToeWithClasses c:\users\tamend\documents\visual studio 2015\projects\tictactoewithclasses\tictactoewithclasses\tictactoeclassimp.cpp 14 
Error C2653 'TicTacToe': is not a class or namespace name TicTacToeWithClasses c:\users\tamend\documents\visual studio 2015\projects\tictactoewithclasses\tictactoewithclasses\tictactoeclassimp.cpp 16 
Error C2065 'squareArray': undeclared identifier TicTacToeWithClasses c:\users\tamend\documents\visual studio 2015\projects\tictactoewithclasses\tictactoewithclasses\tictactoeclassimp.cpp 24 
Error C2065 'squareArray': undeclared identifier TicTacToeWithClasses c:\users\tamend\documents\visual studio 2015\projects\tictactoewithclasses\tictactoewithclasses\tictactoeclassimp.cpp 29 
Error C2065 'squareArray': undeclared identifier TicTacToeWithClasses c:\users\tamend\documents\visual studio 2015\projects\tictactoewithclasses\tictactoewithclasses\tictactoeclassimp.cpp 34 
Error C2653 'TicTacToe': is not a class or namespace name TicTacToeWithClasses c:\users\tamend\documents\visual studio 2015\projects\tictactoewithclasses\tictactoewithclasses\tictactoeclassimp.cpp 38 
Error C3861 'getPlayerMove': identifier not found TicTacToeWithClasses c:\users\tamend\documents\visual studio 2015\projects\tictactoewithclasses\tictactoewithclasses\tictactoeclassimp.cpp 48 
Error C3861 'checkForWin': identifier not found TicTacToeWithClasses c:\users\tamend\documents\visual studio 2015\projects\tictactoewithclasses\tictactoewithclasses\tictactoeclassimp.cpp 50 
Error C3861 'checkForTie': identifier not found TicTacToeWithClasses c:\users\tamend\documents\visual studio 2015\projects\tictactoewithclasses\tictactoewithclasses\tictactoeclassimp.cpp 56 
Error C3861 'togglePlayer': identifier not found TicTacToeWithClasses c:\users\tamend\documents\visual studio 2015\projects\tictactoewithclasses\tictactoewithclasses\tictactoeclassimp.cpp 63 
Error C2653 'TicTacToe': is not a class or namespace name TicTacToeWithClasses c:\users\tamend\documents\visual studio 2015\projects\tictactoewithclasses\tictactoewithclasses\tictactoeclassimp.cpp 70 
Error C2065 'squareArray': undeclared identifier TicTacToeWithClasses c:\users\tamend\documents\visual studio 2015\projects\tictactoewithclasses\tictactoewithclasses\tictactoeclassimp.cpp 98 
Error C2065 'squareArray': undeclared identifier TicTacToeWithClasses c:\users\tamend\documents\visual studio 2015\projects\tictactoewithclasses\tictactoewithclasses\tictactoeclassimp.cpp 100 
Error C2065 'moveCounter': undeclared identifier TicTacToeWithClasses c:\users\tamend\documents\visual studio 2015\projects\tictactoewithclasses\tictactoewithclasses\tictactoeclassimp.cpp 105 
Error C2653 'TicTacToe': is not a class or namespace name TicTacToeWithClasses c:\users\tamend\documents\visual studio 2015\projects\tictactoewithclasses\tictactoewithclasses\tictactoeclassimp.cpp 116 
Error C2653 'TicTacToe': is not a class or namespace name TicTacToeWithClasses c:\users\tamend\documents\visual studio 2015\projects\tictactoewithclasses\tictactoewithclasses\tictactoeclassimp.cpp 124 
Error C2065 'moveCounter': undeclared identifier TicTacToeWithClasses c:\users\tamend\documents\visual studio 2015\projects\tictactoewithclasses\tictactoewithclasses\tictactoeclassimp.cpp 128 
Error C3861 'checkLineForWin': identifier not found TicTacToeWithClasses c:\users\tamend\documents\visual studio 2015\projects\tictactoewithclasses\tictactoewithclasses\tictactoeclassimp.cpp 138 
Error C3861 'checkLineForWin': identifier not found TicTacToeWithClasses c:\users\tamend\documents\visual studio 2015\projects\tictactoewithclasses\tictactoewithclasses\tictactoeclassimp.cpp 146 
Error C3861 'checkLineForWin': identifier not found TicTacToeWithClasses c:\users\tamend\documents\visual studio 2015\projects\tictactoewithclasses\tictactoewithclasses\tictactoeclassimp.cpp 151 
Error C2653 'TicTacToe': is not a class or namespace name TicTacToeWithClasses c:\users\tamend\documents\visual studio 2015\projects\tictactoewithclasses\tictactoewithclasses\tictactoeclassimp.cpp 157 
Error C2065 'squareArray': undeclared identifier TicTacToeWithClasses c:\users\tamend\documents\visual studio 2015\projects\tictactoewithclasses\tictactoewithclasses\tictactoeclassimp.cpp 159 
Error C2065 'squareArray': undeclared identifier TicTacToeWithClasses c:\users\tamend\documents\visual studio 2015\projects\tictactoewithclasses\tictactoewithclasses\tictactoeclassimp.cpp 160 
Error C2065 'squareArray': undeclared identifier TicTacToeWithClasses c:\users\tamend\documents\visual studio 2015\projects\tictactoewithclasses\tictactoewithclasses\tictactoeclassimp.cpp 161 
Error C2653 'TicTacToe': is not a class or namespace name TicTacToeWithClasses c:\users\tamend\documents\visual studio 2015\projects\tictactoewithclasses\tictactoewithclasses\tictactoeclassimp.cpp 164 

Haupt

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

#include "stdafx.h" 
#include <iostream> 
#include "TicTacToe.h" 

bool getUserWantToPlay(); 

int main() 
{ 

    while (getUserWantToPlay()) 
    { 

     TicTacToe game; 
     game.playGame(); 

    } 

    return(0); 
} 

bool getUserWantToPlay() 
{ 

    //Assumes no play until response received 
    char response; 
    bool invalidResponse = true; 
    bool play = false; 

    while (invalidResponse) 
    { 

     std::cout << "Would you like to play a new game of TicTacToe? (y/n) " << std::endl; 
     std::cin >> response; 

     if (response == 'y') 
     { 
      invalidResponse = false; 
      play = true; 
     } 
     else if (response == 'n') 
     { 

      std::cout << "No Problem!" << std::endl; 
      invalidResponse = false; 
     } 
     else 
     { 
      std::cout << "Please input a proper response (y/n) " << std::endl; 
     } 
    } 

    return play; 
} 

Kopf

#ifndef TICTACTOE_H_ 
#define TICTACTOE_H_ 


class TicTacToe 
{ 

    public: 
     TicTacToe(); 
     void playGame(); 

    private: 
     void drawBoard(); 
     void getPlayerMove(char player); 
     char togglePlayer(char player); 

     bool checkForWin(char player); 
     bool checkLineForWin(int square1, int square2, int square3, char player); 
     bool checkForTie(); 

     char squareArray[9]; 
     int moveCounter; 

}; 

#endif 

Klasse Implementierung

//TicTacToe class implementation 

#include "TicTacToe.h" 
#include "stdafx.h" 
#include <iostream> 

static const int MinMovesNeededToWin = 5; 
static const int MaxMovesInGame = 9; 

TicTacToe::TicTacToe() 
: squareArray{ '1','2','3','4','5','6','7','8','9' }, 
moveCounter(0) 
{ 
} 

void TicTacToe::drawBoard() 
{ 

    //Draws the game board with updated characters for each player 

    std::cout << "Player 1 (X) - Player 2 (O)" << std::endl << std::endl << std::endl; 

    std::cout << " |  |" << std::endl; 
    std::cout << " " << squareArray[0] << " | " << squareArray[1] << " | " << squareArray[2] << std::endl; 

    std::cout << "____|_____|____" << std::endl; 
    std::cout << " |  | " << std::endl; 

    std::cout << " " << squareArray[3] << " | " << squareArray[4] << " | " << squareArray[5] << std::endl; 

    std::cout << "____|_____|____" << std::endl; 
    std::cout << " |  | " << std::endl; 

    std::cout << " " << squareArray[6] << " | " << squareArray[7] << " | " << squareArray[8] << std::endl; 

} 

void TicTacToe::playGame() 
{ 

    char player = 'X'; 
    bool gameOver = false; 

    do 
    { 

     drawBoard(); 
     getPlayerMove(player); 

     if (checkForWin(player)) 
     { 

      std::cout << std::endl << "Congratulations player " << player << "! You win!" << std::endl; 
      gameOver = true; 
     } 
     else if (checkForTie()) 
     { 

      std::cout << "Tie! You should play again to settle the duel!" << std::endl; 
      gameOver = true; 

     } 
     player = togglePlayer(player); 

    }while (!gameOver); 

    drawBoard(); 
} 

void TicTacToe::getPlayerMove(char player) 
{ 

    //Gets player move and stores in board array for display through next iteration 

    bool playerMoveFound = false; 
    char playerTurn = '0'; 
    char playerMove = '0'; 

    if (player == 'X') 
    { 
     playerTurn = '1'; 
    } 
    else 
    { 
     playerTurn = '2'; 
    } 

    while (playerMoveFound == false) 
    { 

     std::cout << "Player " << playerTurn << " please make a move" << std::endl; 
     std::cin >> playerMove; 

     for (int counter = 0; counter < 9; counter++) 
     { 

      //If finds the array number makes the change to the iteration...prevents x or o movement 
      if (playerMove == squareArray[counter] && playerMove != 'X' && playerMove != 'O' && playerMove != 'x' && playerMove != 'o') 
      { 
       squareArray[counter] = player; 

       playerMoveFound = true; 

       //Move counter implemented to streamline check for win/check for tie 
       moveCounter++; 
      } 
     } 

     if (playerMoveFound == false) 
     { 
      std::cout << "Invalid player move..." << std::endl; 
     } 
    } 
} 

char TicTacToe::togglePlayer(char player) 
{ 

    player = player == 'X' ? 'O' : 'X'; 

    return(player); 
} 

bool TicTacToe::checkForWin(char player) 
{ 
    bool playerWin = false; 

    if (moveCounter >= MinMovesNeededToWin) 
    { 

     // Only need to check for current player 
     // Only need to check until we have a win 

     // Tests rows for win 
     for (int rowCounter = 0; !playerWin && rowCounter < 8; rowCounter += 3) 
     { 

      playerWin = checkLineForWin(rowCounter, rowCounter + 1, rowCounter + 2, player); 

     } 

     // Tests columns for win 
     for (int columnCounter = 0; !playerWin && columnCounter < 3; columnCounter++) 
     { 

      playerWin = checkLineForWin(columnCounter, columnCounter + 3, columnCounter + 6, player); 

     } 

     // Tests diagnols for win 
     playerWin |= (checkLineForWin(0, 4, 8, player) | checkLineForWin(2, 4, 6, player)); 
    } 

    return(playerWin); 
} 

bool TicTacToe::checkLineForWin(int square1, int square2, int square3, char player) 
{ 
    return squareArray[square1] == player && 
     squareArray[square2] == player && 
     squareArray[square3] == player; 
} 

bool TicTacToe::checkForTie() 
{ 

    return moveCounter == MaxMovesInGame; 

} 
+0

Es ist möglich, dass Ihre Klassenimplementierungsdatei nicht kompiliert wird, weil 'stdafx.h' nicht zuerst eingeschlossen wird; Ändern Sie die Reihenfolge der Includes so, dass "stdafx.h" _before_ 'TicTacToe.h' eingeschlossen ist. – ildjarn

+0

@ildjarn Wow ... das hat es behoben! Haha Danke! Darf ich fragen, warum das passieren würde? Bitte posten Sie das als Antwort, damit ich Ihnen dafür danken kann. Genau was ist stdafx.h? Offensichtlich ist es eine Header-Datei, aber was ist drin? Das habe ich in der Finsternis nicht gesehen. – StormsEdge

+1

Es wird mit vorkompilierten Headern verwendet. Siehe [stdafx.h: Wann brauche ich es?] (Http://stackoverflow.com/questions/676385/stdafx-h-when-doe-need-it) –

Antwort

2

Mit Visual C++, wenn precompiled headers aktiviert sind (was sie in der Regel standardmäßig sind, genannt stdafx.h) Ihre PCH muss der ersten Header in jeder Übersetzungseinheit enthalten sein. Wenn Sie vergessen, den PCH vollständig einzuschließen, erhalten Sie einen angemessenen C1010 Fehler, der Ihnen so sagt; Allerdings gibt es leider keine sinnvolle Diagnoseausgabe, um Ihnen zu erklären, warum Dinge scheitern, wenn Sie nur die Header in der falschen Reihenfolge einfügen.

Ändern Sie die Reihenfolge der enthält in der Klassenimplementierung TU so dass stdafx.hvorTicTacToe.h enthalten ist. Weitere Informationen zu vorkompilierten Headern im Zusammenhang mit VC++ finden Sie unter here.

+1

Alternativ können Sie die Compileroption [/ FI (Name Erzwungene Include-Datei)] (https://msdn.microsoft.com/en-us/library/8c5ztk84.aspx) angeben.Dies ist besonders interessant beim Kompilieren von 3rd-Party-Bibliothekscode, den Sie nicht ändern können, aber dennoch mit vorkompilierten Headern verwenden möchten. – IInspectable

Verwandte Themen