【发布时间】:2018-12-28 06:04:23
【问题描述】:
我正在尝试实现一个多文件类,但我对“如何做”感到非常困惑。
我已经在主文件中声明了这个类并且它可以工作,但现在我正在尝试让它从主文件中分离出来。
我有这些疑问:
1-) 我的类中有一个构造函数,所以当我在 .cpp 文件中声明它时,我将在构造函数中声明一个构造函数????听起来很混乱..
2-) 如果.cpp文件中的函数使用主文件中声明的全局变量/向量,我需要使用Extern声明它吗??
3-) 我需要#include .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_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 文件中的结构,但不知道如何导入。
【问题讨论】: