2012-07-14 69 views
0

的代碼工作的,因爲它coutshaha因爲它說,但它會導致一個錯誤:練習使用模板返回錯誤

Process returned -1073741819 <0xC0000005>

而且會彈出一個窗口,告訴我,如果我想發送一個錯誤信息。爲什麼是這樣?

#include <iostream> 

using namespace std; 

template <class A> 

    A print(A a) { 
     cout << a; 
    } 

template <class T> 

    class David { 
     T a; 
     public: 
      David(T something) : a(something) {} 
      void laugh() { 
       print(a); 
      } 
    }; 

int main() { 

    David <string> Do("Hahaha"); 

    Do.laugh(); 

} 
+1

請打開(並看看)你的編譯器的警告。如果有的話,你不需要在這裏發帖。 – Mat 2012-07-14 12:56:17

+1

您是否使用Visual Studio?我不明白這是如何編譯的。 – ThomasMcLeod 2012-07-14 13:45:19

回答

6
template <class A> 

    A print(A a) { 
     cout << a; 
    } 

它`不正確。函數中沒有返回值,所以編譯器從堆棧中返回一些垃圾。 更好的我認爲將這個聲明

template<class A> 
void print(const A& a) { cout << a; } 
+0

我感謝你,你。你的回答將在接下來的時間內被接受。 – 0x499602D2 2012-07-14 12:54:51

+0

我可以問一下'const A&a'是什麼,它做了什麼? – 0x499602D2 2012-07-14 13:00:55

+1

對A的const引用,當你使用void print(A a)時,copy-ctor將被調用,當你通過const引用傳遞時copy-ctor不會被調用(當你使用原始類型時,它並不重要,但是例如std :: string不是原始的,所以最好使用const引用),也不能改變引用的數據。 – ForEveR 2012-07-14 13:02:49