Undefined Reference
HejJeg har lavet min egen SOCKETKLASSE INetSocket, i den har jeg funktioner til at f.eks. create,accept,read m.m
#include "INetSocket.h"
#include <iostream>
using namespace std;
INetSocket::INetSocket(){
connected = false;
sock = -1;
}
INetSocket::INetSocket(int port){
connected = false;
sock = socket(AF_INET, SOCK_STREAM, 0);
if(sock < 0) {
throw socketErr(errno);
}
else {
thisHost.sin_addr.s_addr = htonl(INADDR_ANY);
}
// For at vi hurtigt kan genbruge socket til den port
int yes = 1;
if (setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(int)) == -1) {
throw socketErr(errno);
}
thisHost.sin_family = AF_INET;
thisHost.sin_port = htons(port);
acceptPort = port;
if (bind(sock,(struct sockaddr*)&thisHost,sizeof(thisHost))<0) {
throw socketErr(errno);
}
}
void INetSocket::Create() {
connected = false;
sock = socket(PF_INET,SOCK_STREAM,0);
if (sock < 0) {
throw socketErr(errno);
}
}
void INetSocket::Listen(ulong MaxConnections) {
if (listen(sock,MaxConnections)<0) {
throw socketErr(errno);
}
}
void INetSocket::Accept(INetSocket* newSocket) {
size_t size = sizeof(struct sockaddr_in);
struct sockaddr_in tmp;
int newsock = accept(sock,(struct sockaddr*)&tmp,&size);
remoteHost = tmp;
if (newSocket < 0)
throw socketErr(errno);
newSocket->sock = newsock;
newSocket->connected = true;
newSocket->acceptPort = acceptPort;
memcpy(&newSocket->remoteHost,&remoteHost,size);
// så kan vi måske samle oplysninger om den connected remote host
}
void INetSocket::Connect(const char* host,ushort port) {
struct hostent* hostinfo;
remoteHost.sin_family = AF_INET;
remoteHost.sin_port = htons(port);
hostinfo = gethostbyname(host);
if (hostinfo == NULL) {
throw socketErr(errno);
}
remoteHost.sin_addr = *(struct in_addr*)hostinfo->h_addr;
if (connect(sock,(struct sockaddr*)&remoteHost,sizeof(remoteHost))<0) {
throw socketErr(errno);
}
connected = true;
}
int INetSocket::Write(const char* buf, int len) {
int written = write(sock, buf, len);
if ( written != len )
return -1;
return written;
}
int INetSocket::Read(char* buf,ulong len) {
return read(sock,buf,len);
}
bool INetSocket::IsConnected() {
return connected;
}
int INetSocket::GetSocket() {
return sock;
}
void INetSocket::Shutdown(int action) {
shutdown(sock,action);
}
void INetSocket::Close() {
close(sock);
connected = false;
}
/*int main() {
INetSocket test(80);
return 0;
}*/
Denne main virker hvis den bliver kommenteret "ind". Men hvis jeg laver en anden cpp fil, test.cc som ser sådan ud:
#include "INetSocket.h"
int main() {
INetSocket test;
return 1;
}
Den kan godt kompillere med ikke bygge, jeg får følgende fejl.
Bygger fil: test.cc...
g++ "test.cc" -o "test"
/tmp/ccqobXlR.o(.text+0x18): In function `main':
: udefineret reference til "INetSocket::INetSocket[in-charge]()"
collect2: ld returned 1 exit status
Completed ... unsuccessful
Total time taken: 1 secs