首页 > 解决方案 > 在 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多个错误。也许我犯了一些错误。在这种分离之前,代码运行良好。

非常感谢任何帮助。问候

标签: c++classheader-files

解决方案


  1. 您不应该在标题中声明全局变量。您正在 main.cpp 和 myclasses.cpp 之间创建冲突。查找引用全局变量的“extern”关键字。

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

  3. 您不应该使用“typedef 类”。你用了两次,但在第三节课上没有。

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


推荐阅读