-2

MySQL C API 関数をラップする共有ライブラリを生成しました。このようなsample.hおよびsample.cppファイルがあります

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

    public:
    MySqlInstance(string,string,string,port);
    int connectToDB();
 }

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
}

使用済み:

  • g++ -fPIC -c sample.cppmysql_config --cflags

  • g++ -shared -Wl,-soname,libsample.so -o libsample.so sample.omysql_config --libs

libsample.so が生成され、これを /usr/lib に移動しました。この共有ライブラリを使用する小さな cpp ファイルを同じディレクトリに作成しました。 usesample.cpp

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

使用済み:

  • g++ -c usesample.cpp -lsample

それは私にこのエラーを与えています:

エラー: 「MysqlInstance」はこのスコープで宣言されていません エラー: オブジェクトはこのスコープで宣言されていません

ありがとう

4

2 に答える 2

1

さて、あなたのクラスには名前MysqlInstanceが付けられていますが、 main() ではそれを として参照しMySQlInstance、cpp 実装ではMySqlInstance.

C++ では大文字と小文字が区別されるため、どこでも正しい識別子を使用してください。

于 2012-11-22T07:14:00.960 に答える
0

いくつかのエラーがあります。1つは、コンストラクタ宣言です

 MySqlInstance(string,string,string,port);

あなたはおそらく意味します

MySqlInstance(string,string,string,int);

次に、定義、タイプがport間違っています:

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

次に、クラス名

class MyqllInstance { .... };

する必要があります

class MySqlInstance { .... };

次に、 in を使用MySQlInstanceしてmainいますが、クラスはMySqlInstance.

C++ では大文字と小文字が区別されないことに注意してください。

using namespace std最後に、ヘッダー ファイルを入れないでください。実際、どこにも置かないでください。

于 2012-11-22T07:16:28.510 に答える