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 引用可能更好。
当我尝试在 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 引用可能更好。