-2

我之前问过一个类似的问题,但现在我想更具体一点。我面临的问题是我有一个包含不可复制对象的对象,当有人想要使用我的接口并且他没有很好地使用它(尝试使用对象的复制构造函数)时,他会得到一个编译错误,它将指向对象而不是他的实际代码。所以有两个问题:1.我可以以某种方式修复它以将其指向他的原始代码行吗?2.如果我不能,我怎么能放一个只有在有人真正尝试使用副本c'tor时才会发生的static_assert(我已经尝试了一些但即使有人不使用它我也会得到它们...... )

我正在添加示例代码和编译错误,以防我不理解...注意最后一个编译错误指向 ObjectHolder h。文件..虽然我希望它指向主要的谢谢!

*是我替换名称时的错误。实际上是导致编译错误的代码。让我们假设我不想实现一个私人复制 c'tor 只是为了转发残疾复制

class NonCopyableObject 
{
    public:
        virtual ~NonCopyableObject () {}

        NonCopyableObject(int i) { m_index = i;}
        int m_index;
    private:
        NonCopyableObject(const NonCopyableObject& other) {}
};

class ObjectHolder 
{
    public:
        virtual ~ObjectHolder ();
        ObjectHolder(int i) : obj(i) {}

        NonCopyableObject obj;
};

void main()
{
    ObjectHolder first(1);
    ObjectHolder second(first);
}

1>------ Build started: Project: tester, Configuration: Debug Win32 ------
1>  main.cpp
1>d:\users\someone\documents\visual studio 2012\projects\tester\tester\objectholder.h(13): error C2248: 'NonCopyableObject::NonCopyableObject' : cannot access private member declared in class 'NonCopyableObject'
1>          d:\users\someone\documents\visual studio 2012\projects\tester\tester\noncopyableobject.h(15) : see declaration of 'NonCopyableObject::NonCopyableObject'
1>          d:\users\someone\documents\visual studio 2012\projects\tester\tester\noncopyableobject.h(8) : see declaration of 'NonCopyableObject'
1>          This diagnostic occurred in the compiler generated function 'ObjectHolder::ObjectHolder(const ObjectHolder &)'
4

1 回答 1

1

提供的错误消息不反映提供的代码。

除此之外,你有一个错误。考虑代码:

class ObjectHolder 
{
    public:
        virtual ~ObjectHolder ();
        ObjectHolder(int i) : obj(i) {}

        ObjectHolder obj;
};

ObjectHolder编译器如何确定递归所需的内存量?

于 2013-03-07T15:55:16.203 回答