0

请看下面的代码

计算器.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;
    }
};

主文件

#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 ==========
4

3 回答 3

0

把它扔进 VS2010 真的很快。由于不使用命名空间 std,它不喜欢 cout 和 endl。我只是为了速度添加了一个 using 语句。我更喜欢正常使用 std:: 约定,因为这样可以避免“使用”可能产生的命名问题

它还抱怨没有构造函数和析构函数(在 {} 中添加)

就像之前的评论所说,将你的 main 放在头文件中可能也很糟糕。这都在 test.cpp 的默认项目中

编辑我更改了文件结构以将计算器放在 .h 中

计算器.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];
};

测试.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;
}
于 2013-02-07T06:08:49.937 回答
0

您需要为构造函数和析构函数添加定义

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

Calculator.h你需要告诉编译器cout并且endl来自std命名空间。例如:

std::cout << (x*y) << std::endl; 
于 2013-02-07T06:11:13.063 回答
0

您的项目类型可能是错误的。您需要在控制台应用程序中编写此代码。

顺便说一句,还需要考虑其他答案,特别是定义构造函数和析构函数。

于 2013-02-07T06:16:01.380 回答