반응형

ofstream 사용하려고 하는데 

이항 '<<': 오른쪽 피연산자로 'std::string' 형식을 사용하는 연산자가 없거나 허용되는 변환이 없습니다.

위와 같은 에러가 나왔다........

예제 코드같은걸 찾아봐도 원인을 못찾다가.......


구글링을 통해서 찾았다.


문제의 코드


sub.cpp



sub.h


해결방법은 #include<string>  요것이었다.

iostream만 include하면 되는줄 알았는데

string 도 포함해주어야 한다....


반응형

'programing > C++' 카테고리의 다른 글

[C++] 시간 측정 - clock()  (0) 2017.06.12
[C++] 배열복사 std::copy()  (0) 2017.01.19
[C++] DLL 만들기/사용하기  (1) 2016.12.28
[STL] vector 복사  (0) 2016.10.31
반응형

내가 작성한 코드가 어느정도 시간이 걸리는지 측정을 해야 하는 상황이 생겼다.

c++에서는 clock() 함수를 사용하면 되는데 매우 간단하다.


코드



time.h 헤더를 추가한 후 clock() 함수를 사용하면 된다.

반응형
반응형

배열을 복사해야 하는 상황이 생겼다.

배열 길이가 무려 uint16_t 640*640 의 길이기에 반복문을 쓰기가 겁이 낫다.

처음에는 반복문을 썻는데 집에와서 생각해보니 memcpy와 같은 함수가 있을 것만 같았다.

memcpy는 byte 단위로 복사를 하는거라 다른 방법을 찾던중

std::copy() 함수를 발견했다.

 

매우매우 간단간단.

 

소스코드를 봅시다

#include <iostream> 
#include<algorithm>  
using namespace std;  
int main() 
{
	uint16_t src[16], dst[16];
    for (int i = 0; i < 16; i++) 	
    { 		
    	src[i] = i * i;
    }  	
    copy(src, src + 16, dst);  	
    for (int i = 0; i < 16; i++) 		
    	cout << i << " : " << dst[i] << endl;  	
        
    return 0; 
 }

 

우선 <algrithm> 을 추가 해주어야 합니다.

배열타입은 원하는 타입으로 하면 됩니다.

 

사용법은

 

copy(src  시작, src 마지막 +1, dst);

이렇게 하면 됩니다.

 

전체를 하려면

copy(src, src+길이, dst);

 

요래 해주면 됩니닷.

 

memcpy 로도 되는거 같긴한데 길이 계산을 해주는 것보다는

copy()를 쓰는게 좋을듯합니다.

 

길이가 짧은거는 반복문을 쓰는것도 나쁘지 않을듯.

반응형
반응형

출처 : https://msdn.microsoft.com/ko-kr/library/ms235636.aspx

MSDN 예제를 가져다 쓰고 내가 원하는 기능이 가능한지 테스트를 해볼것입니다.


아.. DLL 어렵도다. 일단 만들면서 익히도록 합시다.


뭐 일단 프로젝트 부터 쭈루룩



자 이렇게 만들고 본격적으로 코딩을 해보아요...

위의 출처 MSDN에 나온 설명을 토대로 이런 저런 내가 필요한 작업들을 테스트 해보아요


헤더 부터 작성을 해봅시다.


MathFuncsDll.h


1.dllimport / dllexport

여기서 보면 dllimport / dllexport 가 있는데.. 멀까 ? 

내가 알기로는 '내보내기' 인데.. 다음에 정리 하는걸로

바쁘니까..


2. namespace

 이건 cpp 공부한 사람이라면 .. 기본이겠죠 ? 

 음.. 나중에 c#에서 c++ dll 쓰는것도 정리 할건데

 그때 namespace가 필요..........했었던것 같은 느낌이 


3. Class

 함수를 여기다가 정의 하면 됩니다.


이제 cpp 파일을 작성해 보아요.


MathFuncsDll.cpp


1. 헤더 추가

위에 작성한 헤더파일을 꼭 추가해주어야 합니다.


2. 클래스::함수() 

클래스내 포함된 함수를 정의하는 겁니다.


요래 하고서 빌드를 하면


.dll, .lib 파일이 생성이 되는 것을 확인할 수 있습니다.

더 여러개 파일이 생성되지만 이 2개와 아까 작성한 헤더파일만 필요합니다.



DLL 사용하기

위에서 만든 dll을 사용해 보자

프로젝트를 만들어서 테스트를 해봅시다.



dllTest.cpp



실행이 안될 것이다. dll을 추가해주어야 하기 때문이지

위의 파일들을 테스트 하기위해 만든 프로젝트에 복사해서 넣어주자.





복사를 해주고 한가지 더 해주어야 한다.

.lib 파일 을 등록해 주어야 하는데

코드에서 입력해도 되지만 뭐 이 방법도 나름 많이 쓰므로 사용해 보자.





자 이제 실행을 하면...  잘 된다.





























반응형
반응형

vector 복사하기..


두가지 방법을 찾았다. copy()를 이용한 복사와 assign()을 이용한 복사이다.


출처 : http://ogoons.tistory.com/75

// copy() 를 이용한 복사

 

destVector.resize((int)(sourceVector.size()));

std::copy( sourceVector.begin(), sourceVector.end(), destVector.begin() );

std::copy( sourceVector.begin() + 2, sourceVector.begin() + 5, destVector.begin() );


// assign() 을 이용한 복사

 

destVector.clear();

destVector.assign( sourceVector.begin(), sourceVector.end() ); // 전체 복사

destVector.assign( sourceVector.begin() + 1, sourceVector.begin() + 4 );



내 소스 코드에 적용을 한 거슨 assign()함수를 이용한 복사다.

몇번째의 값부터 몇개를 복사 해야 하는 상황이기 때문이다.

openCV 와 함께 사용하였다.



결과






반응형

+ Recent posts