簡體   English   中英

C ++鏈接器錯誤

[英]C++ linker error

我的以下程序有問題。該程序使用鏈表實現了堆棧。由於代碼沒問題,這里沒有顯示我的所有代碼。但是我遇到的問題是將不同的文件鏈接在一起。

我正在使用IDE運行該程序。 當我運行TestIntStacks.cpp ,主要方法應該是從StackFunctions.cpp調用test() 測試函數(在StackFunctions.cpp定義)使用TestStack類方法。 目前,我收到一條錯誤消息:“鏈接器錯誤,未定義推送/彈出”。 我做錯了什么? 我確定這與名稱空間有關。

MyStack.h
-------------------------------------
namespace A
{
    class Node{
        public :
            char data;
            StackNode* link;
            StackNode(int v=0): data(v), link(NULL){ }
    };

    class MyStack{
        private:
            Node * top;

        public:
            MyStack():top(NULL){ }
            void push(int c);
    };
}//namespace


//TestStack.cpp
--------------------------------------------------------------
#include "MyStack.h"

namespace A
{
    void MyStack::push(int x)
    {
        StackNode *temp = new StackNode(x);
        temp->link = top;
        top = temp;
    }
}

//StackFunctions.cpp
-----------------------------------------------------------
#include <iostream>
#include "TestStack.h"

using namespace std;
using namespace A;

void test()
{
    MyStack st;
    st.push(1);
    st.push(2);
    st.push(3);
    st.push(4);
}

// TestIntStacks.cpp
----------------------------------------------------------------
// Code for testing the TestStack
// from the A namespace.

#include <iostream>
#include <vector>
using namespace std;
#include "TestStack"
#include "StackFunctions.cpp"

void test();
int main()
{
    test();
    system("pause");
    return 0;
}

您正在頭文件TestStack.h中定義push()pop( )方法,但尚未在TestStack.cpp中為其提供實現。 您需要添加對對象執行推入和彈出操作的代碼。

這個錯誤對我來說似乎很清楚。 您在頭文件中聲明了push()pop() ,但是鏈接器找不到在何處實現這些方法。

它們在哪里定義?

我認為這與提供給鏈接器的參數有關。 例如,當您通過以下方式使用Visual C ++ 6時,會發生類似的錯誤。 假設您為一個類創建了.cpp和.h文件。 如果您沒有在項目中包含cpp文件,則會出現類似的錯誤。 因為IDE不會根據提供的頭文件確定源文件。 我不了解dev-c ++ IDE,但解決方案可能相似。 問題是您編譯(或不編譯)TestStack.cpp,並且此編譯的輸出未提供給鏈接器,因此鏈接器找不到實現。

您需要強制構建腳本同時使用兩個cpp文件。 如果編寫了自己的make文件,則需要為每個源構建中間對象,然后在最后鏈接。

我懷疑DEV-C ++不會自動生成目標文件或嘗試將所有內容鏈接在一起。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM