간단한 테스트용 클래스를 만드는데  vector때문에 컴파일 에러가 발생했다.


error C2143: 구문 오류 : ';'이(가) '<' 앞에 없습니다.

error C4430: 형식 지정자가 없습니다. int로 가정합니다. 참고: C++에서는 기본 int를 지원하지 않습니다.

error C2238: ';' 앞에 예기치 않은 토큰이 있습니다.


헤더 선언 [#include <vector>] 및 네임스페이스 선언 [using namespace std;]는 미리 컴파일된 헤더[stdafx.h]에 추가해두었기 때문에

정상적으로 컴파일이 되어야 했으나 그러지 못했다.


짐작되는 원인으로는,

openCV라이브러리를 사용하고 있는데 이 라이브러리 내부의 네임스페이스와 겹치거나 하는 일이 생기는 듯 하다.



vector 선언에 네임스페이스를 명시해주니 문제가 해결되었다.

  --> std::vector<PCTYPE> m_ticks;



header


#pragma once

#define PCTYPE		__int64

class PerformCheck
{
private:
	PCTYPE m_lastTick;
	PCTYPE m_currentTick;

	vector<pctype> m_ticks;   // a compile error occurred here. attach "std::"

public:
	PerformCheck();
	~PerformCheck();

public:
	// Add current tick count to the queue with incremental index.
	// @return: elapsed time from last call to current call
	PCTYPE AddCheck();

	PCTYPE GetElapsed(const unsigned int& idxFrom, const unsigned int& idxTo);

	inline
	void Clear()
	{
		m_ticks.clear();
		m_lastTick = cvGetTickCount();
	}
};


Posted by Kugi
,



Problem:


오랜만에 Cpp 프로젝트를 다루다가 한 줄 짜리 클래스 멤버 함수를 inline으로 선언했더니 에러가 발생했다.


1>main.obj : error LNK2019: "public: FunctionType ClassName::FunctionName(void)" (?FunctionName@ClassName@@ObjID) 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다.

1>...\test.exe : fatal error LNK1120: 1개의 확인할 수 없는 외부 참조입니다.



Solution:


해결 방법은 간단하다.


클래스 멤버 함수의 경우, inline으로 선언하면 함수 정의는 .cpp가 아닌 .h파일에 포함되어야 한다.







예전에도 비슷한 실수를 한 적이 있었는데, 또 저지르고 말았다. 반성... ㅜ ^ ㅜ

Posted by Kugi
,



Visual Studio 2010으로 만든 C/C++ 콘솔 프로그램을 실행했을 때 자동으로 닫힌다면 (바로 닫히기 때문에 안 열린다고 생각할 수도 있다)

 

일반적으로 다음 두 가지 방법을 통해 해결할 수 있다.

 

 

첫 번째,

 

프로젝트를 생성할 때 'Win32 콘솔 응용 프로그램'이 아닌 '빈 프로젝트'로 생성했을 경우

 

이 때는 [프로젝트 속성->구성 속성->링커->시스템->하위 시스템] 항목을 '콘솔 (/SUBSYSTEM:CONSOLE)'로 변경해주면 된다.

 

 

 

 

두 번째,

 

프로그램의 맨 끝에 'getchar()'를 추가한다.

 

예시)

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main(void)
{
	srand(time(NULL));

	int mynumber = 0;

	cout << "what is your number: ";

	cin >> mynumber;

	cout << "your number is " << mynumber << endl << endl;

	getchar();	// 이 부분을 빠뜨리면 작업 완료 후 콘솔이 곧바로 닫힌다.

	return 0;
}

Posted by Kugi
,