Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;错误 ;1和x9;错误C2146:语法错误:缺少'';标识符前';记录';_C++ - Fatal编程技术网

C++ C++;错误 ;1和x9;错误C2146:语法错误:缺少'';标识符前';记录';

C++ C++;错误 ;1和x9;错误C2146:语法错误:缺少'';标识符前';记录';,c++,C++,蒂克塔克托 #pragma once #include "Header.h" class TicTacToe { vector<char>tictac_array; Records records; public: TicTacToe(); ~TicTacToe(); void push_tictac_array(); int wincheck(); void board(string player1, string

蒂克塔克托

#pragma once
#include "Header.h"

class TicTacToe
{
    vector<char>tictac_array;
    Records records;
public:
    TicTacToe();

    ~TicTacToe();

    void push_tictac_array();

    int wincheck();

    void board(string player1, string player2);

    void start();

    void mainmenu();
};
#ifndef TICTACTOE_H_
#define TICTACTOE_H_

#include <vector>

#include "Records.h"

class TicTacToe {
private:
    std::vector<char> tictac_array;
    Records records;
public:
    TicTacToe();
    ~TicTacToe();
    void push_tictac_array();
    int wincheck();
    void board(const std::string& player1, const std::string& player2);
    void start();
    void mainmenu();
};

#endif
在文件崩溃之前,一切都很顺利。只有在散布所有类文件后,才开始发出此错误,可能是什么问题?
添加了Records.h头文件

您需要保护
头文件.h
文件。只需将
#pragma放在顶部一次
,就像您对
记录所做的那样。h

您需要保护
头.h
文件。只需将
#pragma放在顶部一次
,就像您对
记录所做的那样。h

有多少混淆

首先

  • 不要在头文件中使用无用的include
  • 不要在头文件中使用名称空间
TicTacToe.h中,您包括“Header.h”,其中包括“TicTacToe.h”本身:递归

“#pragma once”不是标准,因此我建议使用实例:

如果你真的想使用它,在使用之前就要学会:它应该是第一条指令,至少在所有“包含”之前

第三

  • 使用关键字“private”,即使它是隐式的
  • get方法应该是const
  • 通过引用传递参数,可以避免无用的复制
蒂克塔克托

#pragma once
#include "Header.h"

class TicTacToe
{
    vector<char>tictac_array;
    Records records;
public:
    TicTacToe();

    ~TicTacToe();

    void push_tictac_array();

    int wincheck();

    void board(string player1, string player2);

    void start();

    void mainmenu();
};
#ifndef TICTACTOE_H_
#define TICTACTOE_H_

#include <vector>

#include "Records.h"

class TicTacToe {
private:
    std::vector<char> tictac_array;
    Records records;
public:
    TicTacToe();
    ~TicTacToe();
    void push_tictac_array();
    int wincheck();
    void board(const std::string& player1, const std::string& player2);
    void start();
    void mainmenu();
};

#endif
记录

#pragma once
#include "Header.h"

class Records
{
protected:
    vector<Records*> rec;
    string player;
    int wins;
    int games;
    int draws;
public:
    Records();
    Records(string player, int wins, int games, int draws);

    ~Records();

    void setName(string player);

    void setWins(int wins);

    void setGames(int games);

    void setDraws(int draws);

    string getName();

    int getWins();

    int getGames();

    int getDraws();

    void addRec(string player, int wins, int games, int draws);

    void sortStats();

    void outRec();

    void saveTo();

    void readFrom();
};
#ifndef RECORDS_H_
#define RECORDS_H_

#include <vector>

class Records {
protected:
    std::vector<Records*> rec;
    string player;
    int wins;
    int games;
    int draws;
public:
    Record();
    Record(const std::string& player, const int& wins, const int& games,const int& draws);
    ~Record();
    void setName(const std::string& player);
    void setWins(const int& wins);
    void setGames(const int& games);
    void setDraws(const int& draws);
    string getName() const;
    int getWins() const;
    int getGames() const;
    int getDraws() const;
    void addRec(const std::string& player, const int& wins, const int& games,const int& draws);
    void sortStats();
    void outRec();
    void saveTo();
    void readFrom();
};

#endif
class Records : public std::vector<Record*> {
}
类记录:公共std::vector{
}
至少对我来说,这更有意义。

多少困惑

首先

  • 不要在头文件中使用无用的include
  • 不要在头文件中使用名称空间
TicTacToe.h中,您包括“Header.h”,其中包括“TicTacToe.h”本身:递归

“#pragma once”不是标准,因此我建议使用实例:

如果你真的想使用它,在使用之前就要学会:它应该是第一条指令,至少在所有“包含”之前

第三

  • 使用关键字“private”,即使它是隐式的
  • get方法应该是const
  • 通过引用传递参数,可以避免无用的复制
蒂克塔克托

#pragma once
#include "Header.h"

class TicTacToe
{
    vector<char>tictac_array;
    Records records;
public:
    TicTacToe();

    ~TicTacToe();

    void push_tictac_array();

    int wincheck();

    void board(string player1, string player2);

    void start();

    void mainmenu();
};
#ifndef TICTACTOE_H_
#define TICTACTOE_H_

#include <vector>

#include "Records.h"

class TicTacToe {
private:
    std::vector<char> tictac_array;
    Records records;
public:
    TicTacToe();
    ~TicTacToe();
    void push_tictac_array();
    int wincheck();
    void board(const std::string& player1, const std::string& player2);
    void start();
    void mainmenu();
};

#endif
记录

#pragma once
#include "Header.h"

class Records
{
protected:
    vector<Records*> rec;
    string player;
    int wins;
    int games;
    int draws;
public:
    Records();
    Records(string player, int wins, int games, int draws);

    ~Records();

    void setName(string player);

    void setWins(int wins);

    void setGames(int games);

    void setDraws(int draws);

    string getName();

    int getWins();

    int getGames();

    int getDraws();

    void addRec(string player, int wins, int games, int draws);

    void sortStats();

    void outRec();

    void saveTo();

    void readFrom();
};
#ifndef RECORDS_H_
#define RECORDS_H_

#include <vector>

class Records {
protected:
    std::vector<Records*> rec;
    string player;
    int wins;
    int games;
    int draws;
public:
    Record();
    Record(const std::string& player, const int& wins, const int& games,const int& draws);
    ~Record();
    void setName(const std::string& player);
    void setWins(const int& wins);
    void setGames(const int& games);
    void setDraws(const int& draws);
    string getName() const;
    int getWins() const;
    int getGames() const;
    int getDraws() const;
    void addRec(const std::string& player, const int& wins, const int& games,const int& draws);
    void sortStats();
    void outRec();
    void saveTo();
    void readFrom();
};

#endif
class Records : public std::vector<Record*> {
}
类记录:公共std::vector{
}

至少对我来说,这更有意义。

我怀疑循环的#include path,例如
Records.h
包括
TicTacToe.h
通过某个路径。顺便说一句,在头文件中使用名称空间
声明从来都不是一个好主意,因为任何包含该头文件的东西都会得到它。我意识到这可能是您目前想要的行为,将该声明放在
.cpp
文件中更安全,或者更好的是,完全限定您的引用。因此
Header.h
包括
记录.h
其中包括
Header.h
。嗯……好的,你能不能别再这样了?停止从
Header.h
中包含
TicTacToe.h
Records.h
,只需将它们包含在您的
main.cpp
中。我怀疑有一个循环的包含路径,例如通过某个路径包含
Records.h
TicTacToe.h
。作为旁注,将
使用名称空间
声明放在头文件中从来都不是一个好主意,因为任何包含该头文件的东西都会得到它。我意识到这可能是您目前想要的行为,将该声明放在
.cpp
文件中更安全,或者更好的是,完全限定您的引用。因此
Header.h
包括
记录.h
其中包括
Header.h
。嗯……好的,你能不能别再这样了?停止从
Header.h
中包含
TicTacToe.h
Records.h
,只需将它们包含在
main中。cpp
#pragma once可能不是法律上的标准,但它是事实上的;对它的支持非常广泛,并且由于复制粘贴和不更改
#define
而导致的错误更少。好的,所以您可以选择使用几乎任何编译器都支持的高级方法,或者使用低级方法来支持不支持的少数方法。我知道我会选择哪一个,特别是对于Tic-Tac-Toe游戏。我唯一能做的就是避免在自定义头之前包含系统头,因为这两个头都包含在同一个源文件中。这样做可能会引入隐式依赖,这可能是在大型项目中跟踪的一个偏差。例如:,假设
记录。h
没有正确地包含
,但某些成员需要它。包含
“Records.h”
独立将失败,但包含
TicTacToe.h
将成功。关于这一点,我有两个学派,但这正是我所处的位置。好吧,我也将
#include
#include
放在
main.cpp
中,因为这两个学派都是正确包含
std::setlocale
std::system
#pragma once声明所必需的,可能不是法律上的标准,但这是事实;对它的支持非常广泛,并且由于复制粘贴和不更改
#define
而导致的错误更少。好的,所以您可以选择使用几乎任何编译器都支持的高级方法,或者使用低级方法来支持不支持的少数方法。我知道我会选择哪一个,特别是对于Tic-Tac-Toe游戏。我唯一能做的就是避免在自定义头之前包含系统头,因为这两个头都包含在同一个源文件中。这样做可能会引入隐式依赖,这可能是在大型项目中跟踪的一个偏差。例如:,假设
记录。h
没有正确地包含
,但某些成员需要它。包含
“Records.h”
独立将失败,但包含
TicTacToe.h