c++ - 在 C++ 中将我的类分成不同的头文件
问题描述
我在将我的类分成一个头文件和一个 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 {body} 我有 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 中运行它时,我看到了几个错误。我检查了与此问题相关的其他线程,例如在 .h 文件或 .cpp 文件中实现类之间的区别,但仍然无法弄清楚问题所在。此外,我有一些全局变量,但似乎我需要在 myclasses.h 头文件和 myclasses.cpp 中重新定义它们
我得到的错误:首先是 myclasses.cpp:对于命令 vector< int> indexinmilp;
错误包括
错误 3 错误 C2143:语法错误:缺少 ';' 在“<”之前,
错误 4 错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持默认整数
对于命令vector< int> indexinga;
错误包括
错误 5 错误 C2143:语法错误:缺少 ';' 在“<”之前,
错误 6 错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持默认整数
对于命令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多个错误。也许我犯了一些错误。在这种分离之前,代码运行良好。
非常感谢任何帮助。问候
解决方案
您不应该在标题中声明全局变量。您正在 main.cpp 和 myclasses.cpp 之间创建冲突。查找引用全局变量的“extern”关键字。
您在 myclasses.cpp 中重新定义了问题解决方案。
您不应该使用“typedef 类”。你用了两次,但在第三节课上没有。
正如其他人所说,您需要提供错误详细信息。
推荐阅读
- javascript - 多个 WebBrowser 控件 WPF 中的集线器连接失败
- oracle - DBMS_PARALLEL_EXECUTE 和间接授予对过程的授权
- python - 如何使用 Python unittest 在另一个方法中模拟一个方法?
- python - Tweepy 地理搜索不断返回超出范围的推文
- java - MAVEN :- 无法解析项目的依赖关系
- netbeans - 返回到 Netbeans 中的当前调试行
- google-cloud-platform - 如何确保我的客户不会滥用我通过 Google Cloud Marketplace 提供的解决方案
- sql - 计算时间范围内的值 (SQL)
- c - C中的while循环,具有非执行条件
- php - Laravel 查询构建器条件与当前查询使用时