不能唱一个字符串

时间:2014-09-25 18:17:41

标签: c++

我正在使用此代码

#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'类型的右侧操作数(或者没有可接受的   转化率)

关于我如何解决它的任何建议?

2 个答案:

答案 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