我正在使用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返回它。 / p>
答案 0 :(得分:4)
您将getter声明为此类的方法,因此您必须像任何其他方法一样定义它:
std::string Authordd::getTableName(){
return tableName;
}
static
关键字仅用于将类方法声明为静态,并且不参与实际的方法定义。
答案 1 :(得分:1)
不确定这是否是最终答案,但要删除"静态"从实施。你不应该写两次!
您应该只在类中编写一次这些关键字,以声明该函数是静态的。
答案 2 :(得分:0)
只有类可以访问私有成员,因此以下内容将允许main
获取静态私有变量的值:
//header.h
#include <string>
class QString {};
class personDB
{
public:
personDB() = default;
personDB(QString dbName, QString dbSurname) {};
};
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;
int id;
};
在以下文件中,我们可以编写getTableName()
来致电Authordd::getTableName()
。
//main.cpp
#include <iostream>
#include "header.h"
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;
}
std::string Authordd::getTableName()
{
return Authordd::tableName;
}
static std::string getTableName() {
return Authordd::getTableName();
}
int main()
{
auto author_name = getTableName();
std::cout << author_name << '\n';
return 0;
}