" error: too few template-parameter-lists"는 신규 버젼 gnu cpp 컴파일러에서 발생하는 에러다.
이 문제는 템플릿 클래스의 static 멤버 변수를 초기화 할 때 발생하며, 해결을 template<>을 static 멤버 변수 초기화 코드 앞에 붙여 주어야 한다.

예를 들어 :


template <class T>

 class A
 {
    static int a;
    static const char * const name;
 };

와 같은 코드가 있다고 해보자. 예전에는 아래와 같이 써도 무방했다 :
 int A::a = 0;
const char * const A::name = NULL;
하지만 위와 같은 코드는 
CeePlusPlus 표준에 의해 이제는 더 이상 유효한 코드가 아니며 "" error: too few template-parameter-lists" 에러를 발생 한다.

아래와 같이 수정하도록 한다 :
 template<> int A<int>::a = 0;
 template<> const char * const  A<int>::name = "example";


Example code 2

 #include <iostream>
 template <int I>
 class B
 {
 public:
   static int b;
 };

template<> int B<1>::b = 1; template <int I> int B<I>::b = 0;

int main() { std::cout << B<1>::b << std::endl; // 1 std::cout << B<2>::b << std::endl; // 0 return 0;
} 
ref.
Too Few Template Parameter Lists : http://www.c2.com/cgi/wiki?TooFewTemplateParameterLists
Posted by kukuta

댓글을 달아 주세요

Fatal error: Maximum execution time of 30 seconds exceeded in *.php on line n

/**
php를 이용해 로그 파일을 분석하는 프로그램을 작성 중 이다.  처음에는 php의 간단하면서도 강력한 문자 처리 능력에 반했으나, 곧 거대한 작업(지금 처리하고 있는것은 9백만건 정도 된다)에 있어서는 상당히 불리 한 언어라는 것을 알게 되었다.

하지만 어쩌겠는가 부탁하는 사람이 유지 보수를 위해서 php로 해달라는데.
*/

이 에러는 소스 상에 무한 루프를 돈다던지 실제로 결과가 나오기 까지 max_execution_time을 초과 할 경우 던져진다.

첫번째 해결 방법은, php.ini 파일을 열어 max_execution_time을 수정하고 restart한다.
※ php.ini의 위치는 phpinfo() 함수를 호출 하면 나온다.

두번째 해결 방법은, set_time_limit(0) 을 해당 페이지에 적어 주면 된다.(함수레퍼런스 보기)

'진리는어디에' 카테고리의 다른 글

C++ style type cast  (2) 2008.08.05
DrawPrimitive와 DrawPrimitiveUP의 차이  (1) 2008.05.19
[PHP]Fatal error: Maximum execution time of 30 seconds  (0) 2008.05.19
Reference list  (0) 2008.05.16
Generation reference counting  (0) 2008.05.15
Logical clock  (2) 2008.05.02
Posted by kukuta
TAG error, php

댓글을 달아 주세요

DB A에 있는 테이블들을 DB B로, rename을 사용하여 옮기는 코드가 오류를 내고 있다는 연락을 받았다. 다른 모든 테이블들은 아무런 군소리 없이 옮겨 지는데 딱 한 테이블만 121 에러 코드를 내면서 옮겨 지지 않았다.

무슨 소린가 해서 구글 박사님게 물어 보니 외부 참조 키가 중복이 되면 121 에러 코드가 리턴 된단다. 그래서 테이블 스키마를 살펴 보니...아무런 constraint가 없었다. 이 테이블은 그냥 컬럼들의 나열일 뿐이었다.

/**
1) MySQL rename menual page : http://dev.mysql.com/doc/refman/4.1/en/rename-table.html
2) 121 error : http://forums.mysql.com/read.php?22,33999,76181#msg-76181

1)은 rename을 하기 위해서는 lock이 걸려 있지 않아야 한다는 것을 길게 이야기 하고 있고, 2)는 외부키 참조 중복과 더 불어, DB파일 자체가 잘 못 될 수도 있음을 이야기 한다.
*/

한창 이 문서 저 문서를 뒤지고 살펴 보던 중 /usr/local/var 밑에 MySQL의 에러 로그가 남는다는 사실을 알았다.(뭐...설정마다 다를 수 있지만..)

그래서 로그를 살펴 보니..이 일이 이번에 발생한 것이 아니고 아주 오래전...2005년 12월 부터 발생하고 있었던 사실을 알아 냈다.

결론은 환경이나 코드상의 버그가 아니라, MySQL자체의 버그이거나, 파일이 깨진 것으로 판단. table을 drop하고 재생성했다. 결과는 당연히 정상 동작하고 있다. 하지만 이거 하나 하려고, 고생했던 수 많은 시간들을 생각하면 눈물이 난다..ㅠㅠ

---------------------------------------------------------------------------------------------------

위의 내용은 사실이 아니었습니다. 속지 마시기를...-_-;;
제가 올린 글을 제가 속지 말라고 하다니 웃기긴 하군요..아무래도 이 문제는 DB의 타입에 문제가 있었던듯 합니다.

InnoDB에서 ISAM으로 변경을 하니 에러가 나지 않는군요.

이게 정확한 해결 방법인지는 저도 잘 모르겠습니다만..아뭏튼 이렇게 하고 난 후에는 에러가 발생하지 않고 있습니다. 혹시 정확한 원인을 아시는 분은 가르쳐 주시면 감사하겠습니다.(-_-)(_ _)

Posted by kukuta

댓글을 달아 주세요