Поделиться через


Ошибка компилятора C2316

Обновлен: Ноябрь 2007

Сообщение об ошибке

"исключение" : не удается перехватить, поскольку деструктор и/или конструктор копирования недоступен
'exception' : cannot be caught as the destructor and/or copy constructor are inaccessible

`Исключение было перехвачено по значению или ссылке, но конструктор копирования и/или оператор присваивания недоступен.

Этот код принимался компилятором из предыдущих версий, но теперь приводит к ошибке. Дополнительные сведения см. в разделе Сводная информация о критических изменениях, которые могут приводить к ошибкам компиляции.

Пример

Следующий пример приводит к возникновению ошибки C2316:

// C2316.cpp
// compile with: /EHsc
#include <stdio.h>

extern "C" int printf_s(const char*, ...);

struct B 
{
public:
    B() {}
    // Delete the following line to resolve.
private:
    // copy constructor
    B(const B&) 
    {
    }
};

void f(const B&) 
{
}

int main() 
{
    try 
    {
        B aB;
        f(aB);
    }
    catch (B b) {   // C2316
        printf_s("Caught an exception!\n");   
    }
}