IBM XL C/C++ 컴파일러에서이 경고가 나오는 이유는 무엇입니까?
#include <iostream>
class Thing
{
// Non-copyable
Thing(const Thing&);
Thing& operator=(const Thing&);
int n_;
public:
Thing(int n) : n_(n) {}
int getValue() const { return n_;}
};
void show(const Thing& t)
{
std::cout << t.getValue() << std::endl;
}
int main()
{
show(3);
}
그러면 다음과 같은 오류가 발생합니다.
int main()
{
show(Thing(3));
}
AIX에서 IBM XL C/C++ 8.0 컴파일러가 다음 경고를 내 보냅니다.
"testWarning.cpp", line 24.9: 1540-0306 (W) The "private" copy constructor "Thing(const Thing &)" cannot be accessed.
"testWarning.cpp", line 24.9: 1540-0308 (I) The semantics specify that a temporary object must be constructed.
"testWarning.cpp", line 24.9: 1540-0309 (I) The temporary is not constructed, but the copy constructor must be accessible.
또한 "-Wall"및 "-pedantic"과 함께 g ++ 4.1.2를 시도했지만 아무런 진단도 얻지 못했습니다. 여기에 복사 생성자에 대한 액세스가 필요한 이유는 무엇입니까? 객체를 복사 할 수 없도록 만들거나 (실제 제어 객체가 복사하는 데 비용이 많이 드는) 명시적인 사본을 전달하는 것 외에 경고를 어떻게 제거 할 수 있습니까?
실제로 클래스의 구현 내에서 복사 생성자를 사용하고 있습니까? –
아니요. 진단서를 작성한 전체 코드 파일을 게시했습니다. –
FYI : VC++ 2005 및 2008에서도 경고없이 컴파일을 시도했습니다. 그래서 당신 말이 맞아 보인다, 문제는 오히려 IBM 컴파일러 특정 것 같다 – jdehaan