链接错误,我不知道为什么我得到它

时间:2016-02-01 02:35:40

标签: c++ linker-errors

我知道有很多人多次问这个问题,但是,我完全迷失在这里。我知道为什么会发生链接器错误,但似乎无法看到问题所在。 任何指出我的错误的帮助都会很棒!

Picture of linker errors

部首:

#ifndef DOWNLOAD_H
#define DOWNLOAD_H
#include <Windows.h>

class Download {
public:

    Download();
    Download(const char *URL, const char *FILE_NAME);
    ~Download();

    LPCTSTR getURL() const;
    LPCTSTR getFileName() const;

    void setUrl(const char &URL) const;
    void setFileName(const char &FILE_NAME) const;

    void downloadFile();

private:
    struct data_T;
};
#endif // DOWNLOAD_H

Cpp文件:

#include "download.h"

struct Download::data_T {
    const LPCTSTR &URL;
    const LPCTSTR &FILE_NAME;
} *data;

Download::Download(){}

Download::Download(const char *URL, const char *FILE_NAME)
{
    &data->FILE_NAME = &FILE_NAME;
    &data->URL = &URL;
}

void Download::downloadFile()
{
    HRESULT hr = URLDownloadToFile (0, &data.URL, &data.FILE_NAME, 0, 0);
    switch (hr)
    {
    case S_OK:                       cout << "Successful download\n";           break;
    case E_OUTOFMEMORY:              cout << "Out of memory error\n";           break;
    case INET_E_DOWNLOAD_FAILURE:    cout << "Cannot access server data\n";     break;
    default:    cout << "Unknown error\n";    break;
    }
    printf("%x",hr);
}

void Download::setUrl(const LPCTSTR &URL) {  &data.URL = URL; }
void Download::setFileName(const LPCTSTR &FILE_NAME) { &data.FILE_NAME =     FILE_NAME; }

LPCTSTR Download::getUrl() const { return &data.URL; }
LPCTSTR Download::getFileName() const { return &data.FILE_NAME; }

Download::~Download()
{
    delete this->data_T;
    delete &data;
}

这就是我初始化类对象并调用函数的方法:

 Download dl("https://www.dropbox.com/s/rm9pszogafgm3e2/Cache_ver.txt?dl=0", "CACHE");
 dl.downloadFile();

先谢谢!

如果你看到任何关于指针或任何事情的错误,请指出我,因为我目前正在大学学习CPP课程:电脑游戏开发,以及它对我来说真的很新(在去那里之前只使用过java)。 再次感谢:)

3 个答案:

答案 0 :(得分:0)

构建可执行文件时,需要链接特定库或包含链接错误中报告的函数的目标文件。

答案 1 :(得分:0)

之前那些链接错误是什么?

这行delete this->data_T;不应该编译,所以我的猜测是前面某处报告了编译错误,没有为download.cpp生成目标文件,然后链接器抱怨缺少目标文件并报告未解决的功能。

  

如果你看到任何关于指针或任何事情我做错了什么,请指出它给我

一条建议:无论您使用何种编译器,请将警告级别调至最高,并密切关注其报告的所有内容。在发布的代码struct data_T;*data等中未初始化&data->FILE_NAME = &FILE_NAME;delete &data;有几个问题。

答案 2 :(得分:0)

我修复了链接器错误带来的问题不完全确定问题是什么,但无论如何这就是我的代码现在的样子。

#include "download.h"
#include <Windows.h>
#include <iostream>
#include <urlmon.h>
#pragma comment(lib, "urlmon.lib")

using namespace std;

Download::Download(){}

Download::Download(const LPCTSTR URL, const LPCTSTR FILE_NAME)
{
    data_T.FILE_NAME = FILE_NAME;
    data_T.URL = URL;
}

void Download::downloadFile()
{
    HRESULT hr = URLDownloadToFile(0, data_T.URL, data_T.FILE_NAME, 0, 0);
    switch (hr)
    {
    case S_OK:
        cout << "Successful download\n";
        break;
    case E_OUTOFMEMORY:
        cout << "Out of memory error\n";
        break;
    case INET_E_DOWNLOAD_FAILURE:
        cout << "Cannot access server data\n";
        break;
    default:
        cout << "Unknown error\n";
        break;
    }
    printf("%x",hr);
}

void Download::setURL(const LPCTSTR URLt) {  data_T.URL = URLt; }
void Download::setFileName(const LPCTSTR FILE_NAMEt) { data_T.FILE_NAME = FILE_NAMEt; }

LPCTSTR Download::getURL() const { return data_T.URL; }
LPCTSTR Download::getFileName() const { return data_T.FILE_NAME; }

Download::~Download(){  delete &data_T; }

class Download
{
public:
    Download();
    Download(const LPCTSTR URL, const LPCTSTR FILE_NAME);
    ~Download();
    LPCTSTR getURL() const;
    LPCTSTR getFileName() const;

    void setURL(const LPCTSTR URL);
    void setFileName(const LPCTSTR FILE_NAME);

    void downloadFile();

private:
        struct URLData {
            LPCTSTR URL;
            LPCTSTR FILE_NAME;
        } data_T;
};

#endif // DOWNLOAD_H

出于某种原因,虽然我只能用默认构造函数初始化类,而不是带参数的构造函数。我现在正在试图解决这个问题,但如果其他人有任何他们说的话来帮助我改进我所写的内容,那将非常感激。 :)