C++ 错误 1 错误 C2146:语法错误:标识符'records'之前缺少';'
C++ Error 1 error C2146: syntax error: missing ';' before identifier 'records'
TicTacToe.h
#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();
};
收割台.h
#include <iostream>
#include <vector>
#include <map>
#include <string>
#include <fstream>
#include <algorithm>
#include "Records.h"
#include "TicTacToe.h"
using namespace std;
记录.h
#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();
};
main.cpp
#include "Header.h"
const int NotUsed = system("color F0");
void main()
{
setlocale(0, "rus");
TicTacToe tictac;
tictac.records.readFrom();
tictac.mainmenu();
}
在文件崩溃之前,一切都很顺利。只有在传播完所有类文件后,才开始发布这个错误,可能是什么问题?添加Records.h头文件
有多少冲突。
首先:
- 永远不要在头文件中使用无用的include
- 永远不要在头文件中使用命名空间
在TicTacToe.h中,您包括"Header.h",它包括<cTacTOe.h">本身:递归。
第二:
"#pragmaonce"不是标准的,所以我建议使用实例:
#ifndef RECORDS_H_
#define RECORDS_H_
class Records {
}
#endif
如果你真的想使用"#pragma once",请先学会使用:它应该是第一条指令,至少在所有"inclues"之前。
第三:
- 使用关键字"private",即使它是隐含的
- get方法应该是const
- 通过引用传递参数,可以避免无用的复制
TicTacToe.h
#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
记录.h
#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
Main:
#include <clocale>
#include <cstdlib>
#include "TicTacToe.h"
using namespace std;
const int NotUsed = system("color F0");
void main() {
setlocale(0, "rus");
TicTacToe tictac;
tictac.records.readFrom();
tictac.mainmenu();
}
第四:
Records类是完全错误的:它有一个Records*的std::向量,这使得它是递归的
你应该有一个例子:
记录.h
class Record {
protected:
string player;
int wins;
int games;
int draws;
public:
Records();
Records(const std::string& player, const int& wins, const int& games,const int& draws);
~Records();
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();
};
记录.h
class Records : public std::vector<Record*> {
}
至少对我来说,这更有意义。
您需要保护Header.h
文件。只需将#pragma once
放在顶部,就像您对Records.h
所做的那样
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- C++ 错误 1 错误 C2146:语法错误:标识符'records'之前缺少';'