我编写了一个程序,它通过套接字向谷歌发送HTTP请求以读取响应。 这非常有效,但是由于我重载了它,我得到了这些编译错误:
错误1
error LNK2005: _initializeWinsock already defined in
Main.obj workshop\SocketTest\WSAStart.obj SocketTest
错误2
error LNK1169: one or more multiply defined symbols
found workshop\Debug\SocketTest.exe 1 1 SocketTest
你有线索吗?
MAIN.C:
#include<stdio.h>
#include "WSAStart.c"
int main(int argc, char *argv[])
{
initializeWinsock();
printf("Initialised.\n");
return 0;
}
WSAStart.c:
#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib") //Winsock Library
WSADATA wsa;
SOCKET s;
struct sockaddr_in server;
char *message, server_reply[2000];
int recv_size;
int initializeWinsock() {
printf("\nInitialising Winsock...");
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
{
printf("Failed. Error Code : %d", WSAGetLastError());
return 1;
}
printf("Initialised.\n");
return 0;
}
答案 0 :(得分:2)
您不应该#include
其他源文件中的源文件。特别是如果包含的源文件也用于通过单独的目标文件构建应用程序。
而是使用所需的声明制作标题文件:
与WSAStart.h
文件类似:
#pragma once
int initializeWinsock();
包含上述标题文件Main.c
,您可以照常调用该函数。