无法在 main 中调用函数(使用 C++ 在 UDP 客户端应用程序中继承)
Unable to call function in main (Inheritance in UDP Client App using C++)
我已经创建了一个单独的 UDP 服务器应用程序和一个客户端应用程序,它们正在相互通信。我已尝试将继承作为此应用程序的下一步(Base class : udp,child class: udpClient)。我已经为客户开发了代码,我在下面展示了我的代码并附有注释作为解释。
我在代码的最后一行遇到问题,其中对象用于调用派生 class。我不知道在这里给出什么参数。我已经用评论突出了问题区域。感谢任何帮助
编辑:另外,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, 0, (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:我认为你在 SO 上发布时在函数中的参数周围添加了星星? (udpworking(*int argc, char* argv[]*)
)
我已经创建了一个单独的 UDP 服务器应用程序和一个客户端应用程序,它们正在相互通信。我已尝试将继承作为此应用程序的下一步(Base class : udp,child class: udpClient)。我已经为客户开发了代码,我在下面展示了我的代码并附有注释作为解释。
我在代码的最后一行遇到问题,其中对象用于调用派生 class。我不知道在这里给出什么参数。我已经用评论突出了问题区域。感谢任何帮助
编辑:另外,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, 0, (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:我认为你在 SO 上发布时在函数中的参数周围添加了星星? (udpworking(*int argc, char* argv[]*)
)