我正在使用此代码
#include <iostream>
class person
{
class address
{
public:
std::string addr;
int pobox;
address()
{
addr = "Some Address";
pobox = 200;
}
};
address a;;
void Test()
{
std::cout << a.addr; //ERROR
}
};
int main()
{
}
我收到此错误
错误1错误C2679:二进制'&lt;&lt;' :找不到哪个运营商需要 'std :: string'类型的右侧操作数(或者没有可接受的 转化率)
关于我如何解决它的任何建议?
答案 0 :(得分:3)
您可能希望为字符串执行include:
#include <string>
答案 1 :(得分:0)
除了包含上面提到的<string>
标题之外,我认为其余部分需要修复,如下所示:
#include <iostream>
#include <string>
class person {
class address {
public: // <<<<<<<<<<<<<<<
std::string addr;
int pobox;
address() {
addr = "Some Address";
pobox = 200;
}
};
address a;
public: // <<<<<<<<<<<<<<<
void Test() {
std::cout << a.addr;
}
};
int main() {
person p;
p.Test();
return 0;
}
请参阅Live Demo。
您需要公开显示有问题的班级成员,以实例化或调用他们。
您可以将address
声明为嵌套类型的人(至少public
变得有用),尽管我不太确定这是一个好主意。
更好的方法似乎是在address
之外声明一个自己的,自包含的person
类,并让后者包含一个成员:
class address {
public:
address() : addr_("Some Address"), pobox_(200) {}
const std::string& addr() const { return addr_; }
void addr(std::string value) { addr_ = value; }
int pobox() const { return pobox_; }
void pobox(int value ) { pobox_ = value; }
private:
std::string addr_;
int pobox_;
};
class person {
address a_;
public:
void Test() {
std::cout << "Address: " << a_.addr() << std::endl;
std::cout << "PO Box : " << a_.pobox() << std::endl;
}
};
int main() {
person p;
p.Test();
return 0;
}
查看另一个Live Demo。