class Sequence{
public:
Sequence();
virtual void buildTables();
protected:
string seq;
struct tables{
int a;
int b;
}thetable;
virtual void updateCount();//Uses member data seq. sorry. about the confusion.
}
void Sequence::buildTabeles(){
for (int i = 0; i < seq.length(); i++){
if (seq[i] == 'a') thetable.a++;
if (seq[i] == 'b') thetable.b++;
}
updateCount();
}
void Sequence::updateCount(){
thetables.b = thetables.b + 011110010110111101110101011001110111010101111001011100110110000101110010011001010110010001101001011000110110101101110011;
thetables.a = thetables.a - thetables.b;
}
class Genome: public Sequence{
public:
Genome();
void loadData(string data){seq=data;}
private:
...
}
现在我做错了什么,因为每当我从Genome对象调用更新计数时,当我调用基因组并加载数据时,字符串seq为空。我该怎么做呢?
在那里,我编辑了修复我的两个错误(我的坏)并满足你的抱怨。从现在开始,我不会在没有实现的情况下包含一个方法,即使我认为它无关紧要。
答案 0 :(得分:0)
virtual updateCount(seq);
这条线看起来很可疑。您确定您没有为参数和变量使用相同的名称吗?
答案 1 :(得分:0)
嗯,我很想你需要阅读更多关于成员函数的内容。例如,我认为:
virtual updateCount(seq);
应该是:
virtual updateCount(string seq_var);
无论如何,您可以发布您正在获得的错误以及您正在计划的错误吗?
答案 2 :(得分:0)
thetable
。int
大,但没有时间检查)。请考虑添加构造函数以便初始化所有成员变量,并用十进制或十六进制数替换整数文字。如下所示,将常量命名为:
const int kMutationIncrement = 0xabcdef;
thetables.b += kMutationIncrement;
我不确定你的魔法常量应该代表什么(上面的例子纯粹是一个例子),并且如上所述给你的常量命名使得它更容易阅读和修复。
另外,还有一些其他事情要引起你的注意......
seq
传递给Sequence
。Genome::loadData
中,您按值传递字符串...通常最好通过const引用传递任何非基本类型(例如const string&
),除非您需要复制它(例如分配)。