我有两个类,Main类和连接类:
Conn.cpp:
#include "conn.h"
#include <postgresql/libpq-fe.h>
Conn::getConnection()
{
connStr = "dbname=test user=postgres password=Home hostaddr=127.0.0.1 port=5432";
PGconn* conn;
conn = PQconnectdb(connStr);
if(PQstatus(conn) != CONNECTION_OK)
{
cout << "Connection Failed.";
PQfinish(conn);
}
else
{
cout << "Connection Successful.";
}
return conn;
}
conn.h
#ifndef CONN_H
#define CONN_H
#include <postgresql/libpq-fe.h>
class Conn
{
public:
const char *connStr;
Conn();
PGconn getConnection();
void closeConn(PGconn *);
};
Main.cpp的
#include <iostream>
#include <postgresql/libpq-fe.h>
#include "conn.h"
using namespace std;
int main()
{
PGconn *connection = NULL;
Conn *connObj;
connection = connObj->getConnection();
return 0;
}
错误:无效使用不完整类型'PGconn {aka struct pg_conn}'
错误:'PGconn {aka struct pg_conn}'的前转声明
任何帮助?
答案 0 :(得分:2)
在conn.h
中,您应该将getConnection
定义为返回PGconn *
,而不是PGconn
。 PGconn
是一种不透明的类型(除了名称之外,您的代码不应该知道它的任何内容),因此您无法返回它或按值使用它。
答案 1 :(得分:1)
该行:
PGconn getConnection();
由于PGConn
是一个不完整的类型,你不能定义一个按值返回它的函数,只有一个指向它的指针。
答案 2 :(得分:1)
在你的conn.cpp中,conn::getConnection()
没有返回类型。从你的代码中,我猜你需要返回一个指向PGconn的指针:
conn.h
class Conn
{
public:
const char *connStr;
Conn();
PGconn* getConnection();
^^ return pointer instead of return by value
void closeConn(PGconn *);
};
conn.cpp
PGconn* Conn::getConnection()
^^^^^^ // return PGconn pointer
{
connStr = "dbname=test user=postgres password=Home hostaddr=127.0.0.1 port=5432";
PGconn* conn = NULL;
conn = PQconnectdb(connStr);
if(PQstatus(conn) != CONNECTION_OK)
{
cout << "Connection Failed.";
PQfinish(conn);
}
else
{
cout << "Connection Successful.";
}
return conn;
}