c++ - 在 A 类中创建一个类型为 B 类的 vector - 问题访问数据 [C++] [成员在两个类中都是私有(private)的]

标签 c++

我不断收到错误,因为 A 类是私有(private)成员。我想避免将它们公开。我认为让 A 的 B 类 friend 可以解决这个问题。
我在 2 个不同的头文件中创建了 2 个类,如下所示:


class A {
    friend class B;
private:
    std::string id;
    std::string name;
    std::string label;
public:
    A();
    ~A() {};
};

B.h
#include "A.h"

class B {
    friend class A;
private:
    std::string num;
    std::string data;
    std::vector<A> vec;
public:
    B();
    friend int display(B&);
    ~B() {};
};

B.cpp
int display(B& b){
// TESTING
    b.vec.resize(5);
    b.vec[0].id = "test";
    cout << b.vec[0].id << endl;
return 1;

}

错误:
error: 'std::__cxx11::string A::id' is private within this context

最佳答案

  • 在 C++ 中使用 friend 通常(99% 的情况)表明设计有问题。因为如果 A 想知道 B 的私有(private)数据,而 B 想访问 A 的私有(private)数据......这通常意味着 A 和 B 想要获得快乐(即成为 同一类 )!
  • 在您的情况下,通常的解决方案(提供了一些细节)是使 A 成为 nested class B.
  • 或者也许你应该考虑哪个类是你结构的“面孔”:如果你认为你的类的用户应该只使用 B,那么 A 可能会被隐藏为 PIMPL , (然后您将公开一个 std::vector<std::shared_ptr<A>> 作为 B 的成员,其中 A 是一个接口(interface))
  • 想一想:您希望 A 有一些成员只能由 B 访问,而其他人不能访问......它在 OOP 中不像那样工作:如果类决定某些东西是公共(public)的,它应该对所有人都是公共(public)的。因此 - 想办法隐藏所有从 A 开始的 B :)
  • 关于c++ - 在 A 类中创建一个类型为 B 类的 vector - 问题访问数据 [C++] [成员在两个类中都是私有(private)的],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60029283/

    相关文章:

    c++ - 作为函数调用的一部分访问其成员时,右值对象何时被销毁?

    C++ 链接错误与 linux 上的多个定义

    c++ - 无法在 MacOS Mojave 上链接 C++11 的库

    c++ - 使用 libusb-win32 与 USB 转 DMX512 接口(interface)通信,找不到任何端点

    c++ - 如何使用 ATA 命令读取磁盘的特定扇区?

    c++ - 非方阵乘法帮助 C++

    C++ 动态类(动态 hack)

    c++ - 不能对二维数组使用 find()

    c++ - 函数返回数组地址而不是它的值

    c++ - 带文件路径的 std::string 到 str::string.c_str() 转换中的有趣问题