내가 만든 목록 데이터 형식을 가져 와서 템플릿으로 사용하려고합니다. 그렇게함으로써 나는 다음과 같은 애매한 문제를 겪었다. 필요한 경우 모든 코드를 게시 할 수 있지만 실제로 문제를 일으키는 함수입니다.비정상적인 오류 : ')'토큰 앞에 비정규 화 된 ID가 있어야합니다.
참고 :이 코드는이 방법을 사용할 때까지 컴파일되었습니다. 나는 모든 라인을 온전한 체크로 써서 컴파일하고 있었는데 모든 것이 좋았지 만이 시점에 도달하면 폭발한다. try/catch 블록을이 메소드 밖으로 가져 가면 잘 컴파일되므로 문제가 헤더에서 누락되지 않았 음을 확신 할 수 있습니다. 다른 답변에서보고 된대로 - 물론 나는 트리플 체크를 확실히했습니다! :)
여기에 문제의 원인이되는 코드입니다 : 내가 말했듯이 여전히 오류를 유발하면서
template<class T>
bool UnsortedListType<T>::IsFull()
{
try { return false; }
catch(std::bad_alloc exception) { return true; } // line 35
}
, 나는 가능한 한 많이 단순화. 다음은 오류입니다 :이 오류에서 찾을 수
UnsortedListType.cpp||In member function 'bool UnsortedListType<T>::IsFull()':
UnsortedListType.cpp|35|error: expected type-specifier
UnsortedListType.cpp|35|error: expected unqualified-id before 'exception'
UnsortedListType.cpp|35|error: expected ')' before 'exception'
UnsortedListType.cpp|35|error: expected '{' before 'exception'
UnsortedListType.cpp|35|error: 'exception' was not declared in this scope
UnsortedListType.cpp|35|error: expected ';' before ')' token
모든 문제가 머리글 또는이 파일 중 하나를 추가 세미콜론 또는 누락 된 세미콜론 중 하나를 말합니다. 나도 그 중 하나의 인스턴스를 찾을 수 없습니다. try/catch 블록을 제거하면 잘 컴파일됩니다.
내가 int를 잡으면 플러스, 그것은 잘 컴파일 :
template<class T>
bool UnsortedListType<T>::IsFull()
{
try { return false; }
catch(int exception) { return true; }
}
는 또한 잡을 수 있습니다 (INT)과는 잘 컴파일,하지만 난 잡으려고 시도하는 경우 (표준 :: bad_alloc 뿐이다) (예 : "예외"변수 이름이없는 경우) 위에 나열된 것과 같은 오류가 발생합니다. 단순히 catch (std :: exception)하려고해도 컴파일이 실패합니다.
그래서 지금 나는 엉망입니다. 나는 C + +에서 어떤 전문가에 의해 스트레칭이 클래스에 대한, 그리고 난이 오류를 극복하는 방법을 잘 모르겠습니다.
덧붙여, 여기에 또한 잘 컴파일이 아닌 일반 버전에서 코드, 그리고 (사람이 궁금해하는 경우, 데일를) 내가 사용 교과서에서 그대로입니다 : 내가 사용하고
bool UnsortedListType::IsFull() const
{
NodeType* location;
try
{
location = new NodeType;
delete location;
return false;
}
catch (std::bad_alloc exception)
{
return true;
}
}
CodeBlocks 12.11 Windows 7에 내장 된 GNU 컴파일러 IDE.
도움을 주시면 더 많은 도움을 드리며 요청이 있으면 더 많은 코드를 게시 해 드리겠습니다. 페이지를 채우고 싶지 않습니다.
미리 감사드립니다.
추 신 : 나는 숙제를하고 있지만, 숙제는 내가 템플릿을 만들 것을 요구하지 않는다. 나는 그 길을 나 자신으로 선택하고있다. 관련성이 있는지 확실하지 않지만 C++ 템플릿을 처음 사용하기 때문에 저것을 그냥 던지십시오.
참조로 예외를 잡습니다. – chris
당신은'#include' –
사실, #include'이 필요하다고 생각합니다. 그리고 네, const 참조에 의해 예외를 잡는 것이 좋습니다 :'catch (const std :: bad_alloc & exception)'. –
jogojapan