我将我的类分成一个标题和一个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中运行它时,我发现了一些错误。我检查了与此问题相关的其他线程,例如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:语法错误:缺少';'在'&lt;'之前 错误4错误C4430:缺少类型说明符 - 假定为int。注意:C ++不支持default-int
对于命令vector< int> indexinga;
错误包括
错误5错误C2143:语法错误:缺少';'在'&lt;'之前 错误6错误C4430:缺少类型说明符 - 假定为int。注意:C ++不支持default-int
对于命令vector< int> indexinga;
错误包括:
错误7错误C2086:'int vector':重新定义 错误8错误C2143:语法错误:缺少';'在'&lt;'之前
对于命令indexinga.resize(jobscp);
,错误包括:
错误15错误C2228:'.resize'的左边必须有class / struct / union 错误16错误C2065:'startinmilp':未声明的标识符
或者在命令void Chrom::variablesresize(){
中我得到以下错误:
错误20错误C2653:'Chrom':不是类或命名空间名称
实际上有50多个错误。也许我犯了一些错误。在此分离之前,代码运行良好。
非常感谢任何帮助。 此致
答案 0 :(得分:2)
您不应在标头中声明全局变量。您正在main.cpp和myclasses.cpp之间创建冲突。查看&#34; extern&#34;用于引用全局变量的关键字。
您在myclasses.cpp中重新定义了问题解决方案。
您不应该使用&#34; typedef class&#34;。你使用它两次但不是第三类。
正如其他人所说,您需要提供错误详情。