2013-02-07 119 views
0

請看看下面的代碼鏈接錯誤類模板

Calculator.h

#pragma once 
#include <iostream> 

template<class T> 


class Calculator 
{ 
public: 
    Calculator(void); 
    ~Calculator(void); 

    void add(T x, T y) 
    { 
     cout << (x+y) << endl; 
    } 

    void min(T x, T y) 
    { 
     cout << (x-y) << endl; 
    } 

    void max(T x, T y) 
    { 
     cout << (x*y) << endl; 
    } 

    void dev(T x, T y) 
    { 
     cout << (x/y) << endl; 
    } 
}; 

Main.cpp的

#include "Calculator.h" 

using namespace std; 

int main() 
{ 

    Calculator<double> c; 
    c.add(23.34,21.56); 


    system("pause"); 
    return 0; 
} 

當我運行此代碼,我得到下面的錯誤。我對班級模板不太瞭解。請幫忙!

1>------ Build started: Project: TemplateCalculator, Configuration: Debug Win32 ------ 
1>LINK : error LNK2001: unresolved external symbol _mainCRTStartup 
1>c:\users\yohan\documents\visual studio 2010\Projects\TemplateCalculator\Debug\TemplateCalculator.exe : fatal error LNK1120: 1 unresolved externals 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 
+1

main()在Calculator.h中??? – billz

+0

可能是因爲你已經在頭文件中獲得了'main'函數。將它移動到'Calculator.cpp'中,'#include Calculator.h'中,然後嘗試編譯。 – Yuushi

+0

@MarkGarcia:他們可以被igonred。這是完整的代碼。數字[2]是我爲未來使用而創建的一個數組。反正我不需要它 –

回答

0

拋出此爲VS2010的真快。由於沒有使用名稱空間標準,它不喜歡cout和endl。我只是爲了速度而使用了一個使用聲明。我更喜歡使用std ::約定正常,因爲這避免了命名將「使用」可以產生

此外,它抱怨沒有構造函數和析構函數(在{}加的)

而像之前的評論說:問題,讓你的主文件頭文件也可能不好。這一切都是在一個默認的項目TEST.CPP

編輯我改變了文件結構具有在.h計算器

Calculator.h

template<class T> 


class Calculator 
{ 
public: 
    Calculator(void) 
    { 
    } 
    ~Calculator(void) 
    { 
    } 

    void add(T x, T y) 
    { 
     cout << (x+y) << endl; 
    } 

    void min(T x, T y) 
    { 
     cout << (x-y) << endl; 
    } 

    void max(T x, T y) 
    { 
     cout << (x*y) << endl; 
    } 

    void dev(T x, T y) 
    { 
     cout << (x/y) << endl; 
    } 

private: 
    T numbers[2]; 
}; 

Test.cpp的

// test.cpp : Defines the entry point for the console application. 
// 

#include "stdafx.h" 


#pragma once 
#include <iostream> 
using namespace std; 
#include "Calculator.h" 

int main() 
{ 

    Calculator<double> c; 
    c.add(23.34,21.56); 


    system("pause"); 
    return 0; 
} 
+0

太好了。謝謝! –

0

如果這是所有的代碼,那麼你沒有定義構造函數和析構函數。至少,它們定義爲空函數:

Calculator() {}   // instead of Calculator(); 
~Calculator() {} 

它爲我做的編譯這樣(以g ++反正)

+0

感謝您的答覆。仍然沒有工作o.O –

+0

考慮到你使用Visual Studio,你確定你正確設置了項目嗎?你需要的是一個控制檯應用程序,而不是一個窗口應用程序。 –

0

您需要爲構造函數和析構函數添加定義

Calculator(void) {} 
~Calculator(void) {} 

Calculator.h你需要告訴編譯器coutendl是從std命名空間。例如:

std::cout << (x*y) << std::endl; 
0

您的項目類型可能是錯誤的。 您需要在控制檯應用程序中編寫此代碼。

順便說一句,其他答案也需要考慮,特別是構造函數和析構函數的定義。