不同的IDE生成0错误与28错误

时间:2016-07-14 13:47:09

标签: c++ eclipse visual-studio c++11 visual-studio-2012

我正试图从Eclipse转移到visual studio,因为我被告知新手更容易中级,我同意我最初的印象。我正在尝试使用类重建经典的TicTacToe构建作为测试文件来感受IDE,我在Visual Studio中收到28个错误和1个警告,相比之下,Eclipse中没有错误和1个警告......代码是完全相同的。我完全糊涂了。

要清楚它在Eclipse中编译并运行,同时在Visual Studio中接收28个错误。

为什么会这样?

以下代码

错误列表

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

主要

// 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;
}

标题

#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

班级实施

//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;

}

1 个答案:

答案 0 :(得分:2)

使用Visual C ++,当启用precompiled headers时(默认情况下它们通常是名为stdafx.h),您的PCH必须是每个翻译单元中包含的第一个标头。如果您忘记完全包含PCH,则会收到一个合理的C1010错误告诉您;然而,遗憾的是,当您仅以错误的顺序包含标题时,没有合理的诊断输出来告诉您为什么事情会失败。

更改类实现TU中包含的顺序,以便在 stdafx.h之前包含 。可以在here找到有关预编译头文件的详细内容{{3}}。