从构造函数传递给成员函数时,私有成员变量为null

时间:2015-03-15 02:39:04

标签: c++ class oop member-functions seqan

我在c ++中对OOP很陌生,所以请耐心等待。

在我的标题中定义我的成员变量;

class AntibodyJunction
{
private:  
    //raw seq
    seqan::Dna5 _raw_sequence;
    //private funcs
    void _setVGeneQueryStartTranslation();

public:
    //V D and J constructor
    AntibodyJunction(AlignAntibody &, AlignAntibody &, AlignAntibody &, seqan::Dna5 &);
    ~AntibodyJunction() {};
};

和cpp

AntibodyJunction::AntibodyJunction(AlignAntibody & VGene, AlignAntibody &JGene,AlignAntibody & DGene, seqan::Dna5 & raw_sequence)
{
    //...some other declaration...//
    seqan::Dna5String _raw_sequence = raw_sequence;
    std::cout <<  "constructor parameter\n" << raw_sequence << std::endl;
    std::cout << "Template dna5\n"  << _raw_sequence << std::endl;
    _setVGeneQueryStartTranslation();

};

void AntibodyJunction::_setVGeneQueryStartTranslation(){
    std::cout << "other raw seq\n" << _raw_sequence << std::endl;
    //...lots of other stuff
}

和输出 - &gt;

constructor parameter
CAGCGATTAGTGGAGTCTGGGGG
Template dna5
CAGCGATTAGTGGAGTCTGGGGG
other raw seq

当我尝试在类函数中访问它时,成员变量_raw_sequence为空。我知道我可以在构造函数中执行所有操作,但我想了解它为什么要重置。 seqan :: Dna5只是seqan库中用于处理生物数据的dna字符串的模板容器。它拥有dna序列。 Here是文档。这令人困惑,因为我在此功能中访问的其他内容似乎都可用。

1 个答案:

答案 0 :(得分:1)

如上所述,您在构造函数中实例化_raw_sequence变量,而不是像这样引用您的成员变量:

this->_raw_sequence = raw_sequence ; //this pointer used to indicate member var

我建议将来通过初始化列表初始化成员变量以避免此类问题。您可以这样重写构造函数:

AntibodyJunction::AntibodyJunction( const AlignAntibody & VGene, const AlignAntibody &JGene, const AlignAntibody & DGene,const  seqan::Dna5 & raw_sequence)
: _raw_sequence(raw_sequence)
{
//....
};