使用MySQL C API生成的共享库时,未在此范围内声明c ++“

时间:2012-11-22 07:10:21

标签: c++ shared-libraries libmysql

我生成了一个包含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.cpp mysql_config --cflags

  • g ++ -shared -Wl,-soname,libsample.so -o libsample.so sample.o mysql_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â未在此范围内声明   错误:未在此范围内声明对象

由于

2 个答案:

答案 0 :(得分:1)

好吧,您的班级名为MysqlInstance,但在您的主要()中,您将其称为MySQlInstance,而在您的cpp实施中,您的班级为MySqlInstance

C ++区分大小写,因此请确保在任何地方都使用正确的标识符。

答案 1 :(得分: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 { .... };

然后,您在MySQlInstance中使用main,但您的课程为MySqlInstance

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

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