LINUX.ORG.RU

разбираюсь с классами непонятные ошибки при компиляции объясните в чем я неправ???


0

0

решил написать свой класс для работы с сокетами... вот в чем проблема объявил класс Sokcet в нем методы Listen Send Recv и т п)) а при вызове этих метов он ругается вот таким образом

server.cpp: In function ‘int main(int, char**)’:
server.cpp:20: error: request for member ‘Listen’ in ‘servId’, which is of non-class type ‘Socket()’
server.cpp:24: error: request for member ‘Accept’ in ‘servId’, which is of non-class type ‘Socket()’
server.cpp:28: error: request for member ‘Recv’ in ‘servId’, which is of non-class type ‘Socket()’
server.cpp:33: error: request for member ‘Send’ in ‘servId’, which is of non-class type ‘Socket()’
server.cpp:35: error: request for member ‘Recv’ in ‘servId’, which is of non-class type ‘Socket()’
на всяки случай исходники(там нет ничего феереичного и заумного так что не стоит высказывать свое мнение я просто прошу помощи) server.cpp
#include "socets.h"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>          
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h> //for memset
#include <arpa/inet.h> // for inet_addr

using namespace std;

int main(int argc,char ** argv)
{
	char *recved, *tosend;
	recved = new char[1024];
	tosend = new char[1024];
	try{
		Socket servId();
		servId.Listen();
		while(true)
		{
			struct sockaddr_in clnt_addr;
			int clientsock=servId.Accept(clnt_addr);
			if (clientsock>0) printf("CLIENT ACCEPTED\n");
			else {printf("CLIENT NOT ACCEPTED\n"); throw 4;}
			memset(&recved,0,sizeof(recved));
			int bytesrecv=servId.Recv(recved,clientsock);
			while (bytesrecv>0)
			{
				printf("input message you want ot send to %s: ", inet_ntoa(clnt_addr.sin_addr));
				gets(tosend);
				servId.Send(tosend);
				memset(&recved,0,sizeof(recved));
				bytesrecv=servId.Recv(recved,clientsock);
				printf("message you recived from server%s: %s ", inet_ntoa(clnt_addr.sin_addr),recved);
			}
		}
	}catch(int code)
	{
		switch(code)
		{
			case 1 :{ fprintf(stderr,"error creating socket......\n"); break;}
			case 2 :{ fprintf(stderr,"error listening sockets......\n"); break;}
 			case 3 :{ fprintf(stderr,"error accepting client......\n"); break;}
 			case 4 :{ fprintf(stderr,"error accepting connection......\n"); break;}
  			case 5 :{ fprintf(stderr,"error sending message......\n"); break;}
  			case 6 :{ fprintf(stderr,"error accepting message......\n"); break;}
		}
	}
	
	return 0;
}

socets.h


#include <netinet/in.h>

#define IP AF_INET
#define nubconect 5
class Socket
{
public:
	int socketID;
	int port;
	struct sockaddr_in own_addr;
	Socket();	
	Socket(char *ip);
	~Socket();
	void Listen();
	int Accept(struct sockaddr_in &member_adr);
	void Connect(int soc_to_connect);
	void Send(char * tosend);
	int Recv(char * torecv, int sock);
private:
	int port_num_gen(void);
};

да ошибки выдает при создании server.o тоесть при g++ -c server.cpp

big_buka
() автор топика
Ответ на: комментарий от jtootf

Специально для тебя буду ставить один! какая разница сколько вопросительных знаков..главное суть вопроса.

big_buka
() автор топика
Ответ на: комментарий от e3d08dff

типа struct sockaddr_in clnt_addr(); ?

да вы тут все с ума посходили, записи, они такие, они смыслы имеют. разные записи - разные смыслы. То, что вы предлагаете, смысла что-то вообще не несет.

t184256 ★★★★★
()
Ответ на: комментарий от t184256

Так ведь можно писать:

[code=cpp] class A; A a(1, 2); [/code]

И было бы логично, если бы пустой конструктор можно было бы вызывать с пустыми скобками.

e3d08dff
()
Ответ на: комментарий от e3d08dff

Вот я если честно тоже так думал. не тепрь понятней чуть стало. скобочки ставятся когда выов фунции а по идее конструктор это тожу функция а если нету скобочек то вызывается стандартный а если есть и с атрибутами то тот которым ты перегрузил стандартный..вроди както так..

big_buka
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.