2012-11-22 2 views
-2

I 생성 된 MySQL의 C API 함수를 래핑하는 공유 라이브러리입니다. 그것은이는 C++ "이 범위 오류에 선언되지 않은

using namespace std; 
class MysqlInstance 
{ 
    protected: 
    string user; 
    string password; 
    string socket; 
    int port; 

    public: 
    MySqlInstance(string,string,string,port); 
    int connectToDB(); 
} 
같이는 sample.h sample.cpp 파일이 sample.cpp

MySqlInstance::MySqlInstance(string user,string pass,string sock,int port) 
{ 
this->port=port; 
this->user=user; 
this->password=pass; 
this->socket=sock; 
} 
MySqlInstance::connectToDB() 
{ 
//code to load libmysqlclient.so from /usr/lib64 and use mysql_init and mysql_real_connect 
// functions to connect and "cout" that connection is successful 
} 

에서

는 사용 :

  • 그램 ++ -fPIC -c sample.cpp mysql_config --cflags

  • 그램 ++ -shared -Wl, -soname, libsample.so -o libsample.so sample.o mysql_config --libs

libsample.so 이제 생성되고, I는 지금은/usr/LIB 그것을 이동 동일한 디렉토리에서이 공유 라이브러리를 사용하는 작은 cpp 파일을 만들었습니다. 사용 usesample.cpp

#include "sample.h" 
using namespace std; 
int main() 
{ 
MysqlInstance* object=new MySQlInstance("root","toor","/lib/socket",3306); 
} 

:

  • 그램 ++ -c usesample.cpp -lsample
  • 그것은 나에게 오류를주고있다

:

error: âMysqlInstanceâ was not declared in this scope error: object was not declared in this scope

감사합니다

+0

질문을 게시 할 때 복사 - 붙여 넣기 오류가 발생했는지 모르겠지만 MysqlInstance 클래스에 두 개의 port 변수가 있습니다. –

+0

Yeah..thats a typo .. 여기의 문제는 MySQL C API 없이도 이런 일을 할 때 오류가 발생합니다. – Sreekar

답변

0

몇 가지 오류가 있습니다.

MySqlInstance::MySqlInstance(string user,string pass,string sock,string port) { .... } 
                   // ^should be int 

그런 다음, 클래스 이름

: 하나는, 당신은 아마 그런
MySqlInstance(string,string,string,int); 

을 의미, 정의, 당신은 port 잘못의 유형이 생성자 선언

MySqlInstance(string,string,string,port); 

입니다

class MyqllInstance { .... }; 

그런 다음

class MySqlInstance { .... }; 

해야합니다, 당신은 mainMySQlInstance를 사용하지만 클래스는 MySqlInstance입니다.

C++는 이고 대소 문자는 구분하지 않습니다.입니다.

마지막으로 using namespace std을 헤더 파일에 넣지 마십시오.사실, 어디에도 두지 마십시오.

+0

미안하지만 필자는 복사하지 않고 붙여 넣은 것은 실제로는 매우 큰 코드이므로 여기에 복사하여 붙여 넣기하십시오. 오식에 신경 쓰지 마라. 하지만 문제는 여기에 바보 같은 ints ot 문자열이 아닙니다. 나는 namespace std를 사용하여 제거했다. 헤더 파일에서 libsample.so를 작성하는 동안 오류 목록이 매우 많았습니다. 자바 프로그래머였습니다. C++의 새로운 기능 – Sreekar

+0

@Sreekar 질문에 잘라 붙이기 오류를 수정하는 것이 좋습니다. 그렇지 않으면 도움이 불가능합니다. – juanchopanza

+0

atlast 오류를 수정했습니다.이 오류는 "MySqlInstance"에서 한 글자가 실수로 작성되어 3 시간 동안 낭비되었습니다. 제 질문을 읽어 주셔서 대단히 고맙습니다. @juanchopanza – Sreekar

1

자, 클래스 이름은 MysqlInstance이지만 메인()에서는 MySQlInstance으로, cpp 구현에서는 MySqlInstance으로 표시됩니다.

C++은 대소 문자를 구분하므로 사방에 올바른 식별자를 사용해야합니다.

+0

OP는 또한 MySqlInstance에서이를 참조합니다. 그래서 한 단어의 총 세 가지 대문자로. 실제 라이브러리의 헤더 및 소스 파일에 다른 대문자 사용 포함. –

관련 문제