无法调用main函数使用C ++的UDP Client App中的继承

问题描述

我创建了一个单独的UDP服务器应用程序和一个客户端应用程序,并且它们彼此通信。我已尝试将继承实现为该应用程序的下一步(基类:udp,子类:udpClient)。我已经为客户开发了代码,下面在我的代码中加了注释作为解释。

我在代码的最后一行遇到了问题,该对象用于调用派生类。我不知道在这里给出什么参数。我已用评论突出显示了问题区域。感谢您的帮助

EDIT:另外,50003是端口号吗?如果大约是70000,检查应该给出错误对吗?但事实并非如此。怎么了?

UDP客户端程序

#include <iostream>
#include <WS2tcpip.h>

#pragma comment (lib,"ws2_32.lib")

using namespace std;

class udp {

protected:
    WSADATA data;
    WORD version = MAKEWORD(2,2);

    int wsOk = WSAStartup(version,&data);

public:
    void checkudp()
    {
        if (wsOk != 0)
        {
            cout << "Can't start Winsock! " << wsOk;
            return;
        }
    }

};

class udp_client : public udp {

private:
    sockaddr_in server;
    char clientIp[256];
    int argc;
    char* argv[];

public:
    void udpworking(*int argc,char* argv[]*) { //PROBLEM HERE with call to main function
        
        server.sin_family = AF_INET; // AF_INET = IPv4 addresses
        server.sin_port = htons(50003); // Little to big endian conversion
        inet_pton(AF_INET,"127.0.0.1",&server.sin_addr); // Convert from string to byte array

        // Socket creation,note that the socket type is datagram
        SOCKET out = socket(AF_INET,SOCK_DGRAM,0);

        // Write out to that socket
        string s(argv[1]);
        int sendOk = sendto(out,s.c_str(),s.size() + 1,(sockaddr*)&server,sizeof(server));

        if (sendOk == SOCKET_ERROR)
        {
            cout << "That didn't work! " << WSAGetLastError() << endl;
        }
        closesocket(out);
        WSACleanup();
    }
};
void main()
{
    udp_client obj;
    obj.udpworking(); //Parameter problem with function call
}

解决方法

udp_client::udpworking需要两个参数,您需要传入参数(在括号中)。

同样,如注释void main()中所述,此功能不是有效的签名。只有int main()(忽略所有参数)和int main(int argc,char **argv)(接受命令行参数)是有效签名。

尝试这样的事情:

int main(int argc,char **argv) {
    udp_client obj;
    obj.udpworking(argc,argv);
    return 0;
}

PS:我认为当您将其张贴在函数上时,您在函数中添加了围绕参数的星号吗? (udpworking(*int argc,char* argv[]*)