我正在使用C作为我的一个小项目 . 我想在类头文件中定义一个静态常量字符串,并使用(静态)getter返回此字符串 . 这是头文件
//*.h
class Authordd : public personDB
{
public:
Authordd();
Authordd(QString dbName, QString dbSurname);
Authordd(QString dbName, QString dbSurname, unsigned int dbid);
static std::string getTableName();
private:
static const std::string tableName;
};
这是cpp文件:
const std::string Authordd::tableName = "Author";
Authordd::Authordd():personDB()
{
;
}
Authordd::Authordd(QString dbName, QString dbSurname):personDB(dbName, dbSurname)
{
;
}
Authordd::Authordd(QString dbName, QString dbSurname, unsigned int dbid):personDB(dbName, dbSurname)
{
id = dbid;
}
static std::string getTableName(){
return (Authordd::tableName);
}
编译我得到以下错误:/../persondb.cpp:21:错误:'tableName'是'personDB' return personDB :: tableName的私有成员;
我注意到,如果我将 tablename 公开,一切正常:我可以将此类成员保密,并使用C中的静态公共getter返回它 .
3 回答
您将getter声明为此类的方法,因此您必须像任何其他方法一样定义它:
static
关键字仅用于将类方法声明为static,并且它不参与实际的方法定义 .只有类可以访问私有成员,因此以下内容将允许
main
获取静态私有变量的值:在以下文件中,我们可以编写
getTableName()
来调用Authordd::getTableName()
.不确定这是否是最终答案,但从实现中删除“静态” . 你不应该写两次!
您应该只在类中编写一次这些关键字,以声明该函数是静态的 .