Разделение моих классов в другой заголовочный файл в C ++ - PullRequest
0 голосов
/ 03 мая 2018

У меня проблема с разделением моих классов на один заголовок и один файл 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: синтаксическая ошибка: отсутствует ';' до '<' <br> Ошибка 4 ошибка C4430: отсутствует указатель типа - предполагается int. Примечание: C ++ не поддерживает default-int

Для команды vector< int> indexinga; Ошибки включают

Ошибка 5 ошибка C2143: синтаксическая ошибка: отсутствует ';' до '<' <br> Ошибка 6 ошибка C4430: отсутствует указатель типа - предполагается int. Примечание: C ++ не поддерживает default-int

Для команды vector< int> indexinga; Ошибки включают в себя:

Ошибка 7: ошибка C2086: 'int vector': переопределение Ошибка 8 ошибка C2143: синтаксическая ошибка: отсутствует ';' до '<' </p>

Для команды indexinga.resize(jobscp); ошибки включают в себя:

Ошибка 15: ошибка C2228: слева от .resize должен быть класс / структура / объединение Ошибка 16, ошибка C2065: 'startinmilp': необъявленный идентификатор

Или в команде void Chrom::variablesresize(){ Я получаю ошибку ниже:

Ошибка 20 Ошибка C2653: «Chrom»: это не имя класса или пространства имен

На самом деле существует более 50 ошибок. Возможно, я допустил некоторую ошибку. Код работал до этого разделения.

Любая помощь высоко ценится. Привет

1 Ответ

0 голосов
/ 03 мая 2018
  1. Вы не должны объявлять глобальные переменные в своем заголовке. Вы создаете конфликт между main.cpp и myclasses.cpp. Найдите ключевое слово "extern" для ссылки на глобальные переменные.

  2. Вы переопределяете решение проблем в myclasses.cpp.

  3. Вы не должны использовать "typedef class". Вы используете это дважды, но не в третьем классе.

  4. Как указано другими, вам необходимо предоставить подробную информацию об ошибке.

...