在 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&lt; int&gt; indexinmilp; 错误包括

错误 3 错误 C2143:语法错误:缺少 ';'在'之前 错误 4 错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int

对于命令vector&lt; int&gt; indexinga; 错误包括

错误 5 错误 C2143:语法错误:缺少 ';'在'之前 错误 6 错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int

对于命令vector&lt; int&gt; indexinga; 错误包括:

错误 7 错误 C2086: 'int vector' : 重新定义 错误 8 错误 C2143:语法错误:缺少 ';'在'

对于命令indexinga.resize(jobscp); 错误包括:

错误 15 错误 C2228:“.resize”左侧必须有类/结构/联合 错误 16 错误 C2065: 'startinmilp' : 未声明的标识符

或者在命令void Chrom::variablesresize() 我得到以下错误:

错误 20 错误 C2653:“Chrom”:不是类或命名空间名称

实际上有50多个错误。也许我犯了一些错误。代码在这次分离之前运行良好。

非常感谢任何帮助。 问候

【问题讨论】:

请编辑问题,提供您遇到的错误。 “但是当我运行它时我发现了几个错误” - 当您不告诉我们这些错误什么时,您希望我们如何为您提供帮助是? 去掉#include &lt;stdafx.h&gt;,或者把它放在第一位。微软主义可以对你的代码做可怕的事情。 @DeiDei 添加了一些错误。 @Jesper0Juhl 有很多错误。我添加了一些。 【参考方案1】:

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

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

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

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

【讨论】:

所以我需要在 myclasses.cpp 中使用 external 来声明它们?我刚刚添加的其他错误呢 我也可以在类中使用 extern 来表示向量等变量吗? 看看这里:***.com/a/499330/9733335 否则,看起来你有很多语法错误。你需要逐步解决这些问题。

以上是关于在 C++ 中将我的类分成不同的头文件的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中的类构造函数中初始化结构数组

C++ 中的头文件和命名空间

C++中关于如何使用自己编写的头文件问题!有代码

c ++包含不同的头文件,在多个源文件中具有相同的类实现

我想问一下vs 2008中的头文件的问题啊

算法竞赛常用C++头文件