【发布时间】:2015-04-09 21:28:19
【问题描述】:
当我尝试在 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++ 禁止初始化成员 `someText' 8 D:\projects\dev-cpp test\main.cpp 使“someText”成为静态的 8 D:\projects\dev-cpp test\main.cpp 对非整数类型“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【问题讨论】:
-
"为什么我不能在声明后初始化变量?" -- 因为 C 不允许 struct 成员这样做,而 C++ 直到很久以后才添加它。甚至静态整数成员的初始化直到 C++03 才可用,并且非静态成员的大括号或初始化器列表至少需要 C++11,您的编译器可能仅部分支持。
-
这样做不行吗?
JustExample& /* << ADDED THERE */ getExmp() { return exmp; }? -
我假设这些错误消息来自您未显示的代码,其中
string someText = "blablabla";作为类成员? -
你真的应该发布两个单独的问题,因为
JustExample的问题与Config的 getter/setter 的问题完全不同 -
@MattMcNabb:是的,你可能是对的,但使用 Visual Studio 对我来说是一种痛苦,尤其是因为我刚刚开始使用 C++。我在 Dev C++ 中编写了这个快速的 sn-p,只是为了快速演示是什么让我有点头疼,并遇到了一个让我有点失望的初始化问题。 ~谢谢
标签: c++ oop c++11 getter-setter return-by-reference