多文件类实现Cpp

时间:2018-07-20 01:29:08

标签: c++ class header multifile

我正在尝试实现一个多文件类,但是我对“如何做”感到非常困惑。

我已经在主文件中声明了该类,并且可以正常工作,但是现在我正尝试从主文件中使它成为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文件中使用该结构,但不知道如何导入。

1 个答案:

答案 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文件中使用该结构,但不知道如何导入。” 在自己的头文件中声明该结构,并在使用该结构的任何地方都包括该结构。