将我的类分成c ++

时间:2018-05-03 04:20:46

标签: c++ class header-files

我将我的类分成一个标题和一个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多个错误。也许我犯了一些错误。在此分离之前,代码运行良好。

非常感谢任何帮助。 此致

1 个答案:

答案 0 :(得分:2)

  1. 您不应在标头中声明全局变量。您正在main.cpp和myclasses.cpp之间创建冲突。查看&#34; extern&#34;用于引用全局变量的关键字。

  2. 您在myclasses.cpp中重新定义了问题解决方案。

  3. 您不应该使用&#34; typedef class&#34;。你使用它两次但不是第三类。

  4. 正如其他人所说,您需要提供错误详情。