У меня проблема с разделением моих классов на один заголовок и один файл 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 ошибок. Возможно, я допустил некоторую ошибку. Код работал до этого разделения.
Любая помощь высоко ценится.
Привет