Я пытаюсь реализовать многофайловый класс, но я ОЧЕНЬ запутался в «как это сделать».
Я объявил этот класс в главном файле, и он работает, но сейчас я пытаюсь сделать его аппартным из основного файла.
Я получил эти сомнения:
1-) В моем классе есть конструктор, поэтому, когда я объявляю его в файле .cpp, я объявляю конструктор внутри конструктора ???? звучит запутанно ..
2-) Если функция в файле .cpp использует глобальную переменную / вектор, объявленный в основном файле, мне нужно объявить это с помощью Extern ??
3-) Нужно ли мне # включать все необходимые библиотеки в функции на .cpp ??
Я не могу сказать ошибку, которую я получаю, потому что каждый раз, когда она другая, иногда я получаю ошибку:
error: 'DataReading' has not been declared|
Я буду очень благодарен за любую помощь 🙂
Сначала я покажу весь класс, который работал над main, помните о конструкторе (я заменю некоторые коды на «// code code», чтобы сократить его)
class DataReading
{
private:
string word;
string line;
string temp;
public:
DataReading(string wd) : word(wd)
{}
void ReadLineByLine()
{
//code code
}
void searchword()
{
//code code
}
int check_data()
{
if ((Names.size() != (DadosDeEntrada[7].Valor+1)) ||(WellTypes.size() != (DadosDeEntrada[7].Valor+1)) || (Positions.size() != (DadosDeEntrada[7].Valor+1))|| (WellsRadius.size() != (DadosDeEntrada[7].Valor+1))|| (Skins.size() != (DadosDeEntrada[7].Valor+1))|| (ControlTypes.size() != (DadosDeEntrada[7].Valor+1))|| (Pressures.size() != (DadosDeEntrada[7].Valor+1)))
{
//code code
}
}
Итак, я покажу, что я пробовал, сначала файл .h:
#ifndef DATAREADING_H
#define DATAREADING_Hclass DataReading
{
public:
DataReading(std::string wd);
void ReadLineByLine();
void searchword();
int check_data();
private:
std::string word;
std::string line;
std::string temp;
};
#endif // DATAREADING_H
Теперь файл .cpp сокращен:
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <vector>
#include <iomanip>
#include <Eigen/Dense>
#define _USE_MATH_DEFINES
#include <math.h>
#include <cmath>
using namespace std;
using namespace Eigen;
extern vector <string> Names; // Cria vetores necessários
extern vector <string> WellTypes;
extern vector <string> Positions;
extern vector <string> WellsRadius;
extern vector <string> Skins;
extern vector <string> ControlTypes;
extern vector <string> Pressures;
/*extern struct StructReading //Estrutura para ler os dados do Reservatório
{
string Variavel;
double Valor;
}
extern vector <StructReading> DadosDeEntrada;*/
DataReading::DataReading(string wd)
{
DataReading(string wd) : word(wd)
{}
}
void DataReading::ReadLineByLine()
{
//code code
}
void DataReading::searchword()
{
//code code
}
int DataReading::check_data()
{
if ((Names.size() != (DadosDeEntrada[7].Valor+1)) ||(WellTypes.size() != (DadosDeEntrada[7].Valor+1)) || (Positions.size() != (DadosDeEntrada[7].Valor+1))|| (WellsRadius.size() != (DadosDeEntrada[7].Valor+1))|| (Skins.size() != (DadosDeEntrada[7].Valor+1))|| (ControlTypes.size() != (DadosDeEntrada[7].Valor+1))|| (Pressures.size() != (DadosDeEntrada[7].Valor+1)))
{
//code code
}
}
PS: мне нужно использовать структуру в файле .cpp, но я не знаю, как импортировать это.
datareading.h
#ifndef DATAREADING_H_INCLUDED
#define DATAREADING_H_INCLUDED
#include <string>
class DataReading
{
private:
std::string word;
std::string line;
std::string temp;
public:
DataReading(std::string const & wd);
void ReadLineByLine();
void searchword();
int check_data();
};
#endif /* DATAREADING_H_INCLUDED */
datareading.cpp
#include "datareading.h"
DataReading::DataReading(std::string const & wd)
: word{ wd }
{}
void DataReading::ReadLineByLine()
{
//code code
}
void DataReading::searchword()
{
//code code
}
int DataReading::check_data()
{
//code code
}
main.cpp
#include "datareading.h"
int main()
{
DataReading dr{"foo"};
}
Вы не должны использовать глобальные переменные, хотя.
«PS: мне нужно использовать структуру в файле .cpp, но я не знаю, как импортировать это». Объявите структуру в своем собственном заголовочном файле и включайте ее везде, где вы используете структуру.
Других решений пока нет …