setter 和 getter 中的引用和指针。需要例子

References and pointers in setters and getters. Need example

当我尝试在 C++ 中使用 return 引用或指针时,我一整天都遇到错误。请告诉我我应该在下面的代码中更改什么以通过引用或指针 return 配置 class 成员。

#include <cstdlib>
#include <iostream>

using namespace std;

class JustExample {
    public:
        string someText;
        JustExample() {
              someText = "blablabla";
        }
};

class Config
{
    public:
        Config();
        string getResourceDir() const;
        JustExample getExmp() { return exmp; }
        void setResourceDir(const string& dir);
        void setExmp(JustExample example) { exmp = example; }
    private:
        JustExample exmp;
        string res_dir;
};

Config::Config() { 
    res_dir = "class value";
}
string Config::getResourceDir() const { return res_dir; }
void Config::setResourceDir(const string& dir) { res_dir = dir; }

int main(int argc, char *argv[])
{
    Config cfg;
    cout << cfg.getResourceDir() << endl;
    cfg.setResourceDir("changed");
    cout << cfg.getResourceDir() << endl;

    cout << cfg.getExmp().someText << endl;

    system("PAUSE");
    return EXIT_SUCCESS;
}

奖金问题。为什么我不能在声明后初始化变量,而是必须在 class 构造函数中分配它们的值,否则我会收到错误消息。

8 D:\projects\dev-cpp test\main.cpp ISO C++ 禁止初始化成员 `someText'
8 D:\projects\dev-cpp test\main.cpp 使 `someText' 静态化
8 D:\projects\dev-cpp test\main.cpp 无效 in-class 非整型 `std::string' 静态数据成员的初始化
 D:\projects\dev-cpp test\main.cpp 在函数 `int main(int, char**)' 中:
38 D:\projects\dev-cpp test\main.cpp 'class JustExample' 没有名为 'someText' 的成员
 D:\projects\dev-cpp test\Makefile.win [构建错误] [main.o] 错误 1

您的 getter 和 setter 代码是正确的,但是,您忘记了 #include <string>。无需进行其他更改。

对于第二个问题。您需要使用 C++11 来获取字符串的内联初始化;但在 C++03 中你应该使用构造函数初始化列表:

JustExample():  someText("blablabla")
{
}

您提供的代码在 mac OS X 上使用 clang 编译,没有错误。但是我没看到你在哪里 return 引用或指针,在配置中你可以这样做:

class Config
{
    public:
        Config();
        const string& getResourceDir() const;
        const JustExample& getExmp() { return exmp; }
        void setResourceDir(const string& dir);
        void setExmp(const JustExample& example) { exmp = example; }
    private:
        JustExample exmp;
        string res_dir;
};

return by pointer 类似,只需将 & 替换为 *,尽管在这种情况下 return 引用可能更好。