Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++连接到PASGRESs总是分段_C++_Postgresql_Libpq_Libpqxx - Fatal编程技术网

C++连接到PASGRESs总是分段

C++连接到PASGRESs总是分段,c++,postgresql,libpq,libpqxx,C++,Postgresql,Libpq,Libpqxx,我无法让libpqxx处理基本查询。它总是有缺点。我目前正在使用一个类来促进连接 //nearestLoc.h class databaseConnection{ public: databaseConnection(); ~databaseConnection(); void SetConnection(); void Disconnect(); pqxx::result query(); void SetCredentials(); v

我无法让libpqxx处理基本查询。它总是有缺点。我目前正在使用一个类来促进连接

//nearestLoc.h
class databaseConnection{
public:
    databaseConnection();
    ~databaseConnection();
    void SetConnection();
    void Disconnect();
    pqxx::result query();
    void SetCredentials();
    void SetSqlString(std::string queryString);

private:
    pqxx::connection *conn;
    std::string strSQL;
    std::string username;
    std::string pass;
    std::string host;
};

//nearestLoc.cpp
#include <cstdlib>
#include <string>
#include <pqxx/pqxx>
#include <iostream>
#include "nearestLoc.h"

using namespace std;
using namespace pqxx;

void databaseConnection::SetConnection(){
        try{
            string tot = string("dbname=xxxx") + string(" user=")+username+ string(" password=")+pass+ string(" host=")+host + string(" port=9000");
        pqxx:connection *conn = new connection(tot);
        }
        catch(const std::exception &e){
            std:cerr << e.what() << std::endl;
        }
    }

void databaseConnection::Disconnect(){
        conn->disconnect();
    }

pqxx::result databaseConnection::query(){
        pqxx:work txn(*conn);
        pqxx::result res= txn.exec(strSQL);
        return res;
    }

void databaseConnection::SetCredentials(){
    this->username= std::getenv("PGUSER");
    this->pass= std::getenv("PGPASSWORD");
    this->host = std::getenv("PGHOST");
}

void databaseConnection::SetSqlString(std::string &queryString){
    this->strSQL = queryString;
}


int main(int argc, char **argv) =
    std::string strque = "SELECT * FROM test LIMIT 5";
    databaseConnection* pdatabase;
    pdatabase->SetSqlString(strque);
    pdatabase->SetCredentials();
    pdatabase->SetConnection();
    pqxx::result sites = pdatabase-> query();
    std::cout
            <<"ID"<<"\t"
            <<"Station_id"<<"\t"
            <<std::endl;
    std::cout
            <<"The top 5 closest sites are"<<std::endl;
    for(pqxx::result::const_iterator row = sites.begin(); row != sites.end(); ++row){
        std::cout
            <<row["id"].as<int>() <<"\t"
            <<row["station_id"].as<int>() <<"\t"
            <<std::endl;
    }
    return 0;
}
我只是想找点东西玩。用g++编译的很好,有什么建议吗

databaseConnection* pdatabase;
pdatabase->SetSqlString(strque);
声明未初始化指针,然后对未初始化指针调用方法

这是你的问题。你可能想写这个:

databaseConnection* pdatabase=new databaseConnection;
pdatabase->SetSqlString(strque);