-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 示例.cppmysql_config --cflags

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

现在生成了 libsample.so 并将其移至 /usr/lib 现在我创建了一个小 cpp 文件,该文件在同一目录中使用此共享库。 使用sample.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

你有几个错误。一、是构造函数声明

 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 { .... };

然后,您正在使用MySQlInstanceinmain但您的课程是MySqlInstance.

请记住,C++不区分大小写

最后,不要放入using namespace std头文件。事实上,不要把它放在任何地方。

于 2012-11-22T07:16:28.510 回答