c ++中的vector <string>声明

时间:2017-07-13 11:35:04

标签: c++ class vector methods

我对c ++很新,所以如果这个解决方案非常简单,我很抱歉。我正在搜索这个网站寻找解决方案,但没找到任何东西。 我需要做一些热力学微积分,因此我的课程初始化了一些信息。由于我的components_i,我编译它时代码中断了。 我正在寻找一种方法将矢量传递给我的班级或其他方式在课堂上提供我想要模拟混合物的信息。

h文件:

#ifndef BASE_H
#define BASE_H
#include <string> 
#include <vector>
#include <iostream>
using namespace std;

class Base
{
    public:
    vector<string> components_i;
    int nComp,nPhase;
    long double T,P,N_p_i,x_p_i;
    Base( vector<string>,int,int,long double,long double,long double );
};

#endif

和cpp:

#include "Base.h"

Base::Base( vector<string> components_i,int nComp, int nPhase, long double T, long double P, long double N_p_i ) {
    Base::components_i = components_i //e.g. H2O and Ethanol
    Base::nComp = nComp;
    Base::nPhase = nPhase;
    Base::T = T;
    Base::P = P;
    Base::N_p_i = N_p_i;
}

这根本不起作用,但我认为它更清楚,我想做什么

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您没有声明您的静态成员。静态成员需要在类声明之外显式声明,添加:

vector<string> Base::components_i;

完整代码应该是这样的:

#include <stdio.h>
#include <string> 
#include <vector>
#include <iostream>
using namespace std;

class Base
{
    public:
        static vector<string> components_i;
        int nComp,nPhase;
        long double T,P,N_p_i,x_p_i;
        Base( vector<string>,int,int,long double,long double,long double );
};

vector<string> Base::components_i;

Base::Base(vector<string> components_i,int nComp, int nPhase, long double T, long double P, long double N_p_i ) {
    Base::components_i = components_i; //e.g. H2O and Ethanol
    Base::nComp = nComp;
    Base::nPhase = nPhase;
    Base::T = T;
    Base::P = P;
    Base::N_p_i = N_p_i;
};

int main() {
    vector<string> vec;
    vec.push_back(string("hello"));
    Base base = Base(vec, 1, 1, 2.0, 2.0, 3.0);
    printf("%s", Base::components_i[0].c_str());
}

这是一个有效的例子:

http://cpp.sh/9xkfk