繁体   English   中英

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

[英]References and pointers in setters and getters. Need example

当我试图在c ++中使用返回引用或指针时,我整天都在出错。 请告诉我我应该在下面的代码中进行哪些更改,以通过引用或指针返回Config类成员。

#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;
}

奖金问题。 为什么不能在声明变量后初始化变量,而必须在类构造函数中赋值,否则会出现错误。

8 D:\projects\dev-cpp test\main.cpp ISO C++ forbids initialization of member `someText' 
8 D:\projects\dev-cpp test\main.cpp making `someText' static 
8 D:\projects\dev-cpp test\main.cpp invalid in-class initialization of static data member of non-integral type `std::string' 
 D:\projects\dev-cpp test\main.cpp In function `int main(int, char**)': 
38 D:\projects\dev-cpp test\main.cpp 'class JustExample' has no member named 'someText' 
 D:\projects\dev-cpp test\Makefile.win [Build Error]  [main.o] Error 1

您提供的代码在Mac OS X上使用clang编译,没有错误。 但是我看不到您在哪里返回引用或指针,在Config中您可以执行以下操作:

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;
};

通过指针返回是类似的,只是用&替换*,尽管在这种情况下最好返回引用。

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

对于第二个问题。 您需要使用C ++ 11来对字符串进行内联初始化。 但是在C ++ 03中,您应该使用构造函数初始化器列表:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM