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的課程 - 我忽略了什麼?
'addTo'應該是'add'?您似乎沒有任何名爲'addTo'的代碼。 – taocp
除非您有充足的理由在頭文件中包含實現,否則不要這樣做。由於'Stack'是一個類模板,你有一個令人信服的理由。如果你刪除了.cpp文件但沒有從項目中刪除它,你將會得到'C1083'錯誤。 –
謝謝。我從項目中刪除了.cpp,這清除了該錯誤。我在Main.obj中遇到了兩個「LNK2019:未解決的外部符號」問題。一個涉及它似乎的構造函數,提及「LinkedList :: LinkedList (void)」;另一個涉及成員函數,「LinkedList :: newHead(int const&)」。也許我只需要將LinkedList轉換爲使用.h來清除它。 –
user2443880