【问题标题】:C++ and MySql++:: Segmentation error?C++ 和 MySql++:: 分段错误?
【发布时间】:2011-02-13 13:05:42
【问题描述】:

好的,我直接把我的代码放在这里:

main.cpp

mysqlpp::Connection conn(false);

int main() {
if (conn.connect(DATABASE, HOST, DBUSER, DBPASS)) {
    Users a(conn, "test","pass");
    //a.authenticate();

还有我的 Users.cpp:

Users::Users(mysqlpp::Connection conn, string username, string password) {
    this->conn = conn;
    this->username = username;
    this->password = password;
}

我可以毫无错误地编译程序,但在命令行中显示“分段错误”。这是什么错误?以及如何解决?

【问题讨论】:

  • 请尝试调试您的代码以找出当您的程序遇到分段错误时执行的语句!
  • 我强烈地感觉到它的用户构造器。如果我排除构造函数,程序没有错误。

标签: c++ segmentation-fault mysql++


【解决方案1】:

您应该在Users 类中存储指向mysqlpp::Connection 的指针,然后在构造函数中接受指针而不是整个连接对象。不要忘记更新您的类实现中的其他引用。

main.cpp:

替换

mysqlpp::Connection conn(false);

mysqlpp::Connection *conn = new mysqlpp::Connection(false);

用户.cpp

替换

Users::Users(mysqlpp::Connection conn, string username, string password) {
this->conn = conn;

Users::Users(mysqlpp::Connection *conn, string username, string password) {
this->conn = conn;

只要在您的 Users.h 中显示类似这样的内容

class Users
{
    private:
        mysqlpp::Connection *conn; // <-- the star is important!
    // rest of class definition goes here
};

然后你访问conn 的方法,比如conn-&gt;method()

【讨论】:

  • 我讨厌指针,这是我在 C++ 中学到的最困难的东西。你能告诉我如何在我的用户类中使用指针吗?
  • @cpp_noob:参考也可以。如果您郑重地讨厌指针,远离编程,或者尝试阅读并找到 C++ 指针、C# 引用、windows 句柄之间的对应关系,...
  • @xtofl:我是 C++ 新手。我虽然我已经将连接作为参考传递了? “参考”是什么意思?
  • 我添加了代码来帮助解释如何在您的情况下使用指针。你应该学会喜欢指针,因为它是制作实际应用程序的唯一方法。你不能把所有东西都放在堆栈上。
  • 我不明白这一行:“然后你访问 conn 的方法,如 conn->method()”Conn 方法????
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多