對不起,這個愚蠢的問題,但我不能找到自己的答案,我用C太新++ :(C++和虛方法重寫
class DBObject : public QObject
{
...
protected:
virtual QString tableName() = 0;
};
class DBUserObject : public DBObject
{
...
protected:
virtual QString tableName() { return "profiles"; };
};
而且我在父母的代碼:
DBObject::DBObject(quint32 id)
: QObject(0)
{
...
if (id != 0)
load(id);
}
bool DBObject::load(quint32 id)
{
QString query = QString("select %1 from %2 where id = :id")
.arg(fieldList().join(","))
.arg(tableName()); <--- here is trouble
...
}
所以我想執行:?
DBUserObject user(3);
但結果我有一個運行時錯誤爲什麼不「配置文件」
你在什麼平臺上使用什麼編譯器?如果您將'tableName()'的實現移動到cpp文件中,那麼結果是否會發生變化,就像您使用load()一樣? – 2010-06-16 12:19:13
1. linux上的gcc和windows上的mingw 2.不改變 – silent 2010-06-16 12:25:56
你是_really_只做兩行'DBUserObject user;'後跟'user.load(3);'? – Troubadour 2010-06-16 12:39:53