我生成了一个包含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);
}
用于:
它给了我这个错误:
错误:âMysqlInstanceâ未在此范围内声明 错误:未在此范围内声明对象
由于
答案 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
放在头文件中。事实上,不要把它放在任何地方。