2013-06-01 30 views
0

我的目標是通過我的鏈接列表創建我自己的堆棧,它可以用作整數,字符串等的模板。下面是我的兩個重要文件。只用一個頭文件定義一個類 - 找不到不存在的cpp

Main.cpp的

#include <iostream> 
#include <string> 
#include "Stack.h" 

using namespace std; 

int main() 
{ 
    Stack<int>* myStack = new Stack<int>(); 
    myStack->add(5); 

    system("pause"); 
    return 0; 
} 

Stack.h

#pragma once 

#include <iostream> 
#include <string> 
#include "LinkedList.h" 

using namespace std; 

template <class T> 
class Stack 
{ 
public: 
    Stack() 
    {} 
    ~Stack() 
    {} 

    void add(const T& val); 

    .... 

private: 
    LinkedList<T> myStack; 
}; 

template<class T> 
inline void Stack<T>::add(const T& val) 
{ 
    myStack.newHead(val); 
} 

.... 

我本來把棧的實現到它自己的.cpp但我有問題,並建議給我用.h來定義內聯函數。奇怪的是,每當我運行我的Main.cpp我得到這個:

「錯誤C1083:無法打開源文件:'Stack.cpp':沒有這樣的文件或目錄。」

這是我第一次嘗試做一個沒有.cpp的課程 - 我忽略了什麼?

+0

'addTo'應該是'add'?您似乎沒有任何名爲'addTo'的代碼。 – taocp

+3

除非您有充足的理由在頭文件中包含實現,否則不要這樣做。由於'Stack'是一個類模板,你有一個令人信服的理由。如果你刪除了.cpp文件但沒有從項目中刪除它,你將會得到'C1083'錯誤。 –

+0

謝謝。我從項目中刪除了.cpp,這清除了該錯誤。我在Main.obj中遇到了兩個「LNK2019:未解決的外部符號」問題。一個涉及它似乎的構造函數,提及「LinkedList :: LinkedList (void)」;另一個涉及成員函數,「LinkedList :: newHead(int const&)」。也許我只需要將LinkedList轉換爲使用.h來清除它。 – user2443880

回答

1

從項目中刪除「Stack.cpp」。它在解決方案資源管理器。

相關問題