在 C++ 中将我的类分成不同的头文件
Posted
技术标签:
【中文标题】在 C++ 中将我的类分成不同的头文件【英文标题】:Separating my classes into different header file in c++ 【发布时间】:2018-05-03 04:20:45 【问题描述】:我在将我的类分成一个头文件和一个 cpp 文件时遇到了问题。以下是我的主要 cpp 文件:
#include "myclasses.h"
#include <math.h>
#include <string.h>
#include "stdafx.h"
#include <fstream>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
.....my other headers....
const int populationsize = 10;
Chrom temp;
chrom popcurrent[populationsize];
chrom poptemp;
chrom popnext[populationsize];
chrom popnextxover[populationsize];
然后是几个函数定义,然后 int main 正文 我的 myclasses.h 头文件如下:
#ifndef myclasses_h
#define myclasses_h
#include <vector>
#include <iostream>
#include <fstream>
#include <stdafx.h>
using namespace std;
int Machines, Jobs,jobscp;
typedef class solutionset
public:
vector <int> indexinmilp;
vector <int> indexinga;
vector <int> startinmilp;
void resize();
;
solutionset problemsolution;
typedef class Chrom
public:
vector<vector <float>> StartTime;
vector<vector <int>> Processing;
vector<vector < int>> t1;
int M;
int W;
float fit;
void variablesresize();
;
class Problem
public:
vector<vector <int>> Processing;
vector<vector < int>> t1;
int M;
int W;
void setvectorsize();
;
#endif
我将 myclasses.cpp 定义如下:
#include "myclasses.h"
#include <vector>
#include <stdafx.h>
#include <iostream>
#include <fstream>
using namespace std;
vector< int> indexinmilp;
vector< int> indexinga;
vector <int> startinmilp;
void solutionset::resize()
for (int i = 0; i < Machines - 1; ++i)
indexinmilp.resize(jobscp);
indexinga.resize(jobscp);
startinmilp.resize(jobscp);
;
solutionset problemsolution;
void Chrom::variablesresize()
int i = 0, j, k;
float a;
std::vector<float> datapoints;
std::ifstream myfile("Input.dat", std::ios_base::in);
i = 0;
myfile.open("Input.dat");
while (!myfile.eof())
myfile >> a;
if (!myfile)
myfile.clear();
myfile.ignore(1);
else
datapoints.push_back(a);
++i;
myfile.close();
Jobs = datapoints[0];
Machines = datapoints[1];
jobisconsidered.resize(Machines);
StartTime.resize(Machines)
for (int i = 0; i < Machines; ++i)
StartTime[i].resize(Jobs);
jobisconsidered[i].reserve(Jobs);
void Problem::setvectorsize()
Processing.resize(Machines);
t1.resize(Machines);
for (int i = 0; i < Machines; ++i)
Processing[i].resize(Jobs);
t1[i].resize(Jobs);
;
但是,当我在 Visual Studio 中运行它时,我看到了几个错误。我检查了与此问题相关的其他线程,例如Difference between implementing a class inside a .h file or in a .cpp file,但仍然无法弄清楚问题所在。此外,我还有一些全局变量,但似乎我需要在 myclasses.h 头文件和 myclasses.cpp 中重新定义它们
我得到的错误:
首先是 myclasses.cpp:
对于命令vector< int> indexinmilp;
错误包括
错误 3 错误 C2143:语法错误:缺少 ';'在'之前 错误 4 错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int
对于命令vector< int> indexinga;
错误包括
错误 5 错误 C2143:语法错误:缺少 ';'在'之前 错误 6 错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int
对于命令vector< int> indexinga;
错误包括:
错误 7 错误 C2086: 'int vector' : 重新定义 错误 8 错误 C2143:语法错误:缺少 ';'在'
对于命令indexinga.resize(jobscp);
错误包括:
错误 15 错误 C2228:“.resize”左侧必须有类/结构/联合 错误 16 错误 C2065: 'startinmilp' : 未声明的标识符
或者在命令void Chrom::variablesresize()
我得到以下错误:
错误 20 错误 C2653:“Chrom”:不是类或命名空间名称
实际上有50多个错误。也许我犯了一些错误。代码在这次分离之前运行良好。
非常感谢任何帮助。 问候
【问题讨论】:
请编辑问题,提供您遇到的错误。 “但是当我运行它时我发现了几个错误” - 当您不告诉我们这些错误什么时,您希望我们如何为您提供帮助是? 去掉#include <stdafx.h>
,或者把它放在第一位。微软主义可以对你的代码做可怕的事情。
@DeiDei 添加了一些错误。
@Jesper0Juhl 有很多错误。我添加了一些。
【参考方案1】:
不应在标题中声明全局变量。您正在 main.cpp 和 myclasses.cpp 之间创建冲突。查找引用全局变量的“extern”关键字。
您在 myclasses.cpp 中重新定义了问题解决方案。
您不应使用“typedef 类”。你用了两次,但在第三堂课上没有。
正如其他人所说,您需要提供错误详细信息。
【讨论】:
所以我需要在 myclasses.cpp 中使用 external 来声明它们?我刚刚添加的其他错误呢 我也可以在类中使用 extern 来表示向量等变量吗? 看看这里:***.com/a/499330/9733335 否则,看起来你有很多语法错误。你需要逐步解决这些问题。以上是关于在 C++ 中将我的类分成不同的头文件的主要内容,如果未能解决你的问题,请参考以下文章