从构造函数传递给成员函数时,私有成员变量为空
Private member variable is null when passed from constructor to member function
我对 C++ 中的 OOP 还很陌生,所以请多多包涵。
在我的 header 中定义了我的成员变量;
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
}
和输出 ->
constructor parameter
CAGCGATTAGTGGAGTCTGGGGG
Template dna5
CAGCGATTAGTGGAGTCTGGGGG
other raw seq
当我尝试在 class 函数中访问它时,成员变量 _raw_sequence
是空白的。我知道我可以在构造函数中做所有事情,但我想了解它为什么要重置。 seqan::Dna5 只是 seqan 库中用于处理生物数据的 dna 字符串的模板容器。它保存着 DNA 序列。 Here 是文档。这很令人困惑,因为我在此函数中访问的所有其他内容似乎都可用。
如上所述,您在构造函数中实例化了一个 _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)
{
//....
};
我对 C++ 中的 OOP 还很陌生,所以请多多包涵。
在我的 header 中定义了我的成员变量;
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
}
和输出 ->
constructor parameter
CAGCGATTAGTGGAGTCTGGGGG
Template dna5
CAGCGATTAGTGGAGTCTGGGGG
other raw seq
当我尝试在 class 函数中访问它时,成员变量 _raw_sequence
是空白的。我知道我可以在构造函数中做所有事情,但我想了解它为什么要重置。 seqan::Dna5 只是 seqan 库中用于处理生物数据的 dna 字符串的模板容器。它保存着 DNA 序列。 Here 是文档。这很令人困惑,因为我在此函数中访问的所有其他内容似乎都可用。
如上所述,您在构造函数中实例化了一个 _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)
{
//....
};