вот программа, которую я написал для реализации нулевого копирования в приложении Qt, но с некоторыми ошибками, написанными ниже:
//client.h
#ifndef CLIENT1_H
#define CLIENT1_H
#include <QObject>
#include <QString>
#include <QtNetwork/QTcpSocket>
#include <QtNetwork/QtNetwork>
class Client: public QObject
{
Q_OBJECT
public:
Client(QObject* parent = 0);
~Client();
void start(QString address, quint16 port);
public slots:
void startTransfer();
private:
QTcpSocket client;
};
#endif // CLIENT1_H
//client.cpp
#include "client1.h"#include <QtNetwork/QHostAddress>
#include <MSWSockDef.h>
#include <MSWSock.h>
Client::Client(QObject* parent): QObject(parent)
{
connect(&client, SIGNAL(connected()),
this, SLOT(startTransfer()));
}
Client::~Client()
{
client.close();
}
void Client::start(QString address, quint16 port)
{
QHostAddress addr(address);
client.connectToHost(addr, port);
}
void Client::startTransfer()
{
int TransmitFile( client,
hfile,
NULL,
NULL,
NULL,
NULL,
TF_USE_SYSTEM_THREAD
);
}
//main.cpp
#include <QCoreApplication>
#include <fstream>
#include <iostream>
#include "client1.h"#include <QtNetwork/QtNetwork>
#include <Windows.h>
using namespace std;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
HFILE hfile;
//Creates an instance of ofstream, and opens example.txt
ofstream a_file ( "example.txt" );
// Outputs to example.txt through a_file
a_file<<"This text will now be inside of example.txt";
// Close the file stream explicitly
hfile = a_file;
//a_file.close();
//hfile = a_file.open("example.txt");
//hfile = a_file.open("example.txt",ios_base::app);
Client client;
client.start("127.0.0.1", 8888);
return a.exec();
}
Ошибки, как показано ниже:
C:\Program Files\Microsoft SDKs\Windows\v7.0A\include\MSWSock.
error: C2061: syntax error : identifier 'LPWSAMSG'
C:\Program Files\Microsoft SDKs\Windows\v7.0A\include\MSWSock.h
error: C4430: missing type specifier - int assumed. Note: C++ does not support default-int
C:\Program Files\Microsoft SDKs\Windows\v7.0A\include\MSWSock.h
error: C4430: missing type specifier - int assumed. Note: C++ does not support default-int
Я знаю, что есть ошибки в transfile () api, но они могут быть удалены, как насчет вышеупомянутых ошибок? `Введите код здесь?
выполнив все вышеперечисленное, просто запустите qmake один раз, он заработает.
Возможно, вам нужно будет включить Winsock2.h, вы можете попробовать это?
Попробуй удалить Mswsockdef.h
включают.
…Заголовочный файл Mswsockdef.h, который автоматически включается в
Заголовочный файл Mswsock.h. Заголовочный файл Mswsockdef.h никогда не должен быть
используется напрямую.