无法访问嵌套类.类的使用无效

Unable to access nested class. Invalid use of class

本文关键字:无效 访问 嵌套      更新时间:2023-10-16

当我试图创建一个嵌套类并访问其中的一个函数时,我遇到了错误。我已经尝试修复它好几个小时了,但没有成功。

错误:"class sqlInterface::connectToSQL"fhm.connectToSQL.connect((的使用无效;

这是我的代码:

sqlTest.cpp:

#include <stdlib.h>
#include <iostream>
#include "mySQLinterface.h"

sqlInterface fhm;
int main(int argc, char const *argv[])
{
fhm.connectToSQL.connect();
return 0;
}

mySQLinterface.h:

#ifndef MYSQLINTERFACE_H
#define MYSQLINTERFACE_H
#include <mysql_connection.h>

class sqlInterface {
public:
class connectToSQL{
public:
void connect(void);
};
};
#endif

mySQLinterface.cpp:

#include "mySQLinterface.h"
#include <mysql_connection.h>
#include <mysql_driver.h>
#include <exception.h>
#include <resultset.h>
#include <statement.h>

#include <iostream>

void sqlInterface::connectToSQL::connect(void){
sql::mysql::MySQL_Driver *driver;
sql::Connection *con;
try{
driver = sql::mysql::get_mysql_driver_instance();
con = driver->connect("tcp://172.17.0.2:3306", "USERNAME", "PASSWORD");
}
catch(std::exception &e){
cout << "CONNECTION ERROR: " << e.what() << endl;
}
bool alive = con->isValid();
std::cout << "Valid connection: " << alive << std::endl;

delete con;

}

connectToSQL是一个类类型。它有一个名为connect的非静态成员函数。因为它是一个非静态成员函数,所以需要connectToSQL的实例才能调用该函数。这意味着

fhm.connectToSQL.connect();

需要成为类似的东西

sqlInterface::connectToSQL{}.connect();

但这并没有多大帮助。你可以制作connectstatic,然后你可以把它称为

fhm.connectToSQL::connect();

但这看起来还是不对。如果你想要

fhm.connectToSQL.connect();

然后

connectToSQL

需要成为CCD_ 6的成员变量。如果将sqlInterface更改为

class sqlInterface {
public:
class connectToSQL_{
public:
void connect(void);
};
connectToSQL_ connectToSQL;
};

然后

fhm.connectToSQL.connect();

现在可以工作了。

您正试图访问一个嵌套类的成员函数,而您没有实例

向类中添加一个实例,例如connectToSQL connection:

class sqlInterface {
public:
class connectToSQL{
public:
void connect(void);
};
// Add an instance
connectToSQL connection;
};

现在您可以在上面调用成员函数,如下所示:

// fhm.connection is an object on which you can call member functions:
fhm.connection.connect();