我的SW中有一组可能的连接,所以我决定使用工厂模式,所以我创建了基类(.h和.cpp)
以下Connection.h
头文件的内容
namespace Connection
{
class Connection
{
public:
Connection();
~Connection();
virtual void sendPacket(Packet* p) = 0;
virtual void receivePacket() = 0;
virtual int connect() = 0;
virtual void disconnect() = 0;
}
}
甚至存在Connection.cpp文件,但它只有一个空的构造函数和解构函数。
接下来,我创建了派生类(.h和.cpp文件)
namespace Connection
{
class SocketConnection : public Connection
{
public:
SocketConnection();
~SocketConnection();
}
}
及其相关的SocketConnection.cpp文件,我正在尝试定义Connection.h中定义的纯虚方法
namespace Connection
{
SocketConnection::SocketConnection() { }
SocketConnection::~SocketConnection() { }
int connect()
{
//Design of socket connection
}
}
接下来,我创建了一个新的Connection, DatabaseConnection 以与SocketConnection()相同的方式进行了实际定义。
我得到的错误是
Connection :: connect();
的多重定义
在调用Cross G++ Linker
但我找不到原因时。谁能告诉我哪里错了?谢谢!
答案 0 :(得分:3)
如果要在SocketConnection中覆盖connect,则必须在类定义中声明它:
namespace Connection
{
class SocketConnection : public Connection
{
public:
SocketConnection();
~SocketConnection();
virtual int connect(); // virtual is not required here but it doesn't hurt
}
}
然后必须正确定义范围:
namespace Connection
{
SocketConnection::SocketConnection() { }
SocketConnection::~SocketConnection() { }
int SocketConnection::connect()
{
//Design of socket connection
}
}
答案 1 :(得分:0)
在SocketConnection.h
内,您应该添加:
virtual int connect();
在SocketConnection.cpp
内,你应该定义一个范围SocketConnection::connect()
而不是connect()
,如下所示:
int SocketConnection::connect()
{
//Design of socket connection
}
所有其他连接类型都相同。