2

你能帮我弄清楚为什么我会收到这些 2019 错误吗?我很确定所有文件都保存在正确的位置,并且我认为我对头文件使用了正确的约定?这是我的系统编程课的实验室。

以下是错误:

1>main.obj : 错误 LNK2019: 函数 _main 中引用的无法解析的外部符号“public: __thiscall DLL::intDLL::intDLL(void)”(??0intDLL@DLL@@QAE@XZ)

1>main.obj:错误LNK2019:函数_main中引用的未解析外部符号“public:__thiscall DLL::intDLL::~intDLL(void)”(??1intDLL@DLL@@QAE@XZ)

1>main.obj:错误 LNK2019:函数 _main 中引用的未解析外部符号“public:void __thiscall DLL::intDLL::addFront(int)”(?addFront@intDLL@DLL@@QAEXH@Z)

1>main.obj:错误 LNK2019:函数 _main 中引用的未解析外部符号“public:int __thiscall DLL::intDLL::getFront(void)”(?getFront@intDLL@DLL@@QAEHXZ)

1>c:\users\josh\documents\visual studio 2012\Projects\Lab10\Debug\Lab10.exe : 致命错误 LNK1120: 4 unresolved externals

intDLL.h 文件:

#include <iostream>
using std::cout;
using std::endl;

class intDLL {

public:
    intDLL();
    intDLL(const intDLL &original);
    ~intDLL();
    void addFront(int inValue);
    void addBack(int inValue);
    void setBack();
    int getFront();
    int getBack();

    struct node {
        int value;
        node *next;
        node *prev;
    };

private:
    node *front;
    node *back;

};

intDLL.cpp

#include <iostream>
#include "intDLL.h"
using std::cout;
using std::endl;


intDLL::intDLL() {
    front = 0;
    back = 0;
}

void intDLL::setBack() {
    node *tempNode = new node;
    if(front == 0) {
        return;
    }

    tempNode = front;
    while(tempNode->back != 0) {
        tempNode = tempNode->prev;  
    }

    back = tempNode;
}

void intDLL::addFront(int inValue) {
    if(front == 0) {
        node *newFront = new node;
        newFront->value = inValue;
        newFront->next = 0;
        newFront->prev = 0;
    }
    else {
        node *newFront = new node;
        newFront->value = inValue;
        newFront->prev = front;
        front->next = newFront;
        newFront->next = 0;
        front = newFront;
    }

    setBack();
}

void intDLL::addBack(int inValue) {
    setBack();
    node *newBack = new node;
    newBack -> value = inValue;
    back->prev = newBack;
    newBack->next = back;
    back = newBack;
}

int intDLL::getFront() {
    return front->value;
}

int intDLL::getBack() {
    return back->value;
}

主要的:

#include <iostream>
#include "intDLL.h"
using std::cout;
using std::endl;

int main(int argc, char* argv[]) {
    intDLL test = intDLL();
    test.addFront(3);
    test.addFront(4);
    test.addFront(5);
    std::cout << test.getFront() << endl;

    return 0;
}
4

1 回答 1

0

不确定真正的错误消息是什么,但似乎您还没有实现一些功能,例如

intDLL(const intDLL &original);
~intDLL();

检查您的函数定义以确保定义了声明的每个函数。还要确保所有 cpp 文件都已编译和链接。

另一个错误是intDLL::node没有后台成员

void intDLL::setBack() {
    intDLL::node *tempNode = new node;
     ^^^^ node is defined in intDLL, you need provide scope
    if(front == 0) {
       return;
    }

  tempNode = front;
  while(tempNode->back != 0) {
                  ^^^ intDLL::node has no back member
    tempNode = tempNode->prev;  
   }

  back = tempNode;
}

请参阅此SO链接。

于 2013-02-13T00:31:25.700 回答