Предупреждение о компиляции для объектов, которые содержат не копируемые объекты, не читаются

Я задавал похожий вопрос раньше, но теперь я хотел бы быть более конкретным.
Проблема, с которой я сталкиваюсь, состоит в том, что у меня есть объект, который содержит не копируемый объект, и когда кто-то хочет использовать мой интерфейс, и он не использует его хорошо (пытается использовать конструктор копирования объекта), он получит ошибку компиляции, которая укажет к объекту, а не его фактический код.
Итак, два вопроса:
1. можно ли это как-то исправить, чтобы он указывал на его исходную строку кода?
2. если я не могу, как я могу поместить static_assert, который произойдет, только если кто-то действительно попытается использовать копию c’or (я пробовал несколько, но потом получаю их, даже если кто-то не использует это … )

Я добавляю пример кода и ошибку компиляции на случай, если меня не поняли …
Обратите внимание, что последняя ошибка компиляции указывает на ObjectHolder h. файл .. пока я хочу, чтобы он указывал на основной
Спасибо!

* была ошибка, когда я заменил имена .. это на самом деле код, который создал ошибку компиляции.
и давайте предположим, что я не хочу реализовывать частную копию, а не просто пересылать возможность копирования

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 &)'

-2

Решение

Предоставленные сообщения об ошибках не соответствуют предоставленному коду.

Это в стороне у вас есть ошибка. Учитывая код:

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

ObjectHolder obj;
};

Как компилятор предполагает определить объем памяти, необходимый для ObjectHolder когда это рекурсивно?

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]