c++ - 不同的 IDE 产生 0 个错误与 28 个错误

标签 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;

}

最佳答案

使用 Visual C++,当 precompiled headers已启用(通常默认情况下,名为 stdafx.h)您的 PCH 必须是每个翻译单元中包含的 第一个 header 。如果您忘记完全包括 PCH,您会得到一个合理的 C1010错误地告诉你;然而,不幸的是,当您只是以错误的顺序包含 header 时,没有明智的诊断输出可以告诉您为什么事情会失败。

更改包含在类实现 TU 中的顺序,以便 stdafx.h 包含在 TicTacToe.h 之前。更多关于 VC++ 上下文中的预编译头文件的阅读可以在 here 中找到。 .

关于c++ - 不同的 IDE 产生 0 个错误与 28 个错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38375987/

相关文章:

c++ - 从 C++ 设置 OLE 请求超时

c++ - 如何让69.99*100打印6999而不是6998?

c++ - eclipse CDT : doesn't show name a macro appears in

visual-studio - 如何在 VS 设置和部署项目中创建名称设置为 [PRODUCTNAME] 的快捷方式?

visual-studio - 在属性上方显示 CodeLens

c++ - OpenCV 识别此图像中的线条

c++ - 函数是否可以只访问和通过多维数组的一维?

eclipse - eclipse 中缺少 .project 和 .classpath 文件

java - 如何在eclipse IDE中显示巨大的变量

css - 背景图片只出现在起始页,而不会出现在其他页面