我正在尝试实现一个多文件类,但是我对“如何做”感到非常困惑。
我已经在主文件中声明了该类,并且可以正常工作,但是现在我正尝试从主文件中使它成为appart。
我有这些疑问:
1-)我在类中有一个构造函数,所以当我在.cpp文件中声明它时,我将在构造函数中声明一个构造函数?听起来令人困惑。
2-)如果.cpp文件中的函数使用在主文件中声明的全局变量/向量,则需要使用Extern ??声明它。
3-)需要我#include .cpp上的函数所需的所有lib吗?
我不能告诉错误我每次都遇到错误时都会得到提示,有时我会收到错误提示:
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_H
class 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文件中使用该结构,但不知道如何导入。
答案 0 :(得分:0)
datareading.h
v-if
datareading.cpp
#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 */
main.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
}
不过,您不应该使用全局变量。
“ PS:我需要在.cpp文件中使用该结构,但不知道如何导入。” 在自己的头文件中声明该结构,并在使用该结构的任何地方都包括该结构。