我正在使用C++作为一个小应用程序。 我有一个具有虚拟方法的父类。这是头文件。如何定义从虚拟继承的静态函数?
class personDB:public person
{
public:
unsigned int id;
public:
personDB();
personDB(QString dbName, QString dbSurname);
personDB(QString dbName, QString dbSurname, unsigned int dbid);
personDB(std::string dbName, std::string dbSurname, unsigned int dbid);
virtual std::string getTableName();
unsigned int getID(void);
void setID(unsigned int myID);
private:
static const std::string tableName;
};
该类由不同的子类继承。每个子类都重新定义在* .cpp文件中分配不同值的tableName
属性。该属性是私有的,并由getter返回。 由于这里的子类的一个示例是头文件:
#include "persondb.h"
class ScriptBy : public personDB
{
public:
ScriptBy();
ScriptBy(QString dbName, QString dbSurname);
ScriptBy(QString dbName, QString dbSurname, unsigned int dbid);
std::string getTableName();
protected:
static const std::string tableName;
};
我想使功能getTableName时()一类的成员函数,以便它返回同一类的所有实例相同的值并且甚至可以在没有该类的实例的情况下被调用。这应该通过将关键字static
放在头文件中的函数声明之前完成,如果我没有错的话。但是,当我尝试以这种方式编译时,它给了我一个与父类中的函数声明为虚拟的事实有关的错误。 我得到的错误是这样的:
In file included from ../../singlestory.h:4:0,
from ../../volume.h:5,
from ../../dbinterface.h:8,
from ../../dbinterface.cpp:1:
../../scriptby.h:12:24: error: ‘static std::__cxx11::string ScriptBy::getTableName()’ cannot be declared
static std::string getTableName();
^
In file included from ../../dbinterface.h:7:0,
from ../../dbinterface.cpp:1:
../../persondb.h:15:25: error: since ‘virtual std::__cxx11::string personDB::getTableName()’ declared in base class
virtual std::string getTableName();
有没有一种方法,使继承的类成员函数的静态?
编辑:如果我不能使该函数静态,我怎么可以使私人属性外面访问没有类的实例(并保持私人)?