错误C2065:模板函数中未声明的标识符 我是一个C++新手,我想在轮子上做个小项目,但是我很难处理这些错误,我不知道我做错了什么。我想,我已经包括了所有必要的头文件。 我做错了什么

错误C2065:模板函数中未声明的标识符 我是一个C++新手,我想在轮子上做个小项目,但是我很难处理这些错误,我不知道我做错了什么。我想,我已经包括了所有必要的头文件。 我做错了什么,c++,visual-studio-2010,templates,C++,Visual Studio 2010,Templates,提前谢谢你 d:\files\visualstudio 2010\projects\calculator\aplicie.cpp(31):错误C2065:'cmdarimetite':未声明的标识符 d:\files\visualstudio 2010\projects\calculator\aplicie.cpp(31):错误C2062:意外键入“int” d:\files\visualstudio 2010\projects\calculator\aplicie.cpp(37):错误C206

提前谢谢你

d:\files\visualstudio 2010\projects\calculator\aplicie.cpp(31):错误C2065:'cmdarimetite':未声明的标识符

d:\files\visualstudio 2010\projects\calculator\aplicie.cpp(31):错误C2062:意外键入“int”

d:\files\visualstudio 2010\projects\calculator\aplicie.cpp(37):错误C2065:'cmd1':未声明的标识符

d:\files\visualstudio 2010\projects\calculator\aplicie.cpp(37):错误C2228:“.Execute”的左边必须有class/struct/union

类型为“未知类型”

编辑

如果我修改
cmdarimetite cmd1(“+”)带有
UI::cmdarimetite cmd1(“+”)尝试编译时出现以下错误:

1>d:\files\visual studio 2010\projects\calculator\aplicatie.cpp(32): error C2440: 'specialization' : cannot convert from 'T (__cdecl *)(T,T)' to 'int (__cdecl *)(int,int)'
1>          None of the functions with this name in scope match the target type
1>d:\files\visual studio 2010\projects\calculator\aplicatie.cpp(39): error C2660: 'Calculator::UI::CmdAritmetice<Operatie>::Execute' : function does not take 1 arguments
1>          with
1>          [
1>              Operatie=0x0
1>          ]
应用程序.cpp已编辑

#include <iostream>
#include "aplicatie.h"
#include "Calcule\operatii.h"
#include "UI\cmdaritmetice.h"

using namespace std;

namespace Calculator{

(...)

    void Aplicatie::Run()
    {
        TestSuma();
        CmdAritmetice <int, Suma> cmd1("+");     //here i have errors
        cmd1.Execute("Introduceti doua numere intregi (x, y)");
    }

    void Aplicatie::TestSuma()
    {
        int x = 10, y = 20;
        int r = Calcule::Suma(x,y);
    }    
}
#包括
#包括“aplicie.h”
#包括“Calcule\operatii.h”
#包括“UI\cmdarimetite.h”
使用名称空间std;
名称空间计算器{
(...)
void应用程序::Run()
{
TestSuma();
cmdarimetite cmd1(“+”)//这里有错误
cmd1.Execute(“intregi(x,y)数字导入”);
}
void应用程序::TestSuma()
{
int x=10,y=20;
int r=微积分:Suma(x,y);
}    
}
cmdarimetite.h

#ifndef ARITMETICE_H
#define ARITMETICE_H
#include "UI\comanda.h"

namespace Calculator{
    namespace UI{

        template<int Operatie(int, int)>
        class CmdAritmetice : public ComandaCalcule
        {

        public:
            CmdAritmetice(const string &nume) : ComandaCalcule(nume)
            {
            }
            void Execute()
            {
            cout << Nume() << endl;
            cout << "Introduceti doua numere intregi (x, y)\n";
            int x, y;
            cin >> x >> endl;
            cin >> y >> endl;
            cout << x << " " << Nume() << " " << y << " = " << Operatie (x,y) <<endl;
            }
        };
    }
}
#endif
\ifndef算术
#定义算术
#包括“UI\comanda.h”
名称空间计算器{
名称空间用户界面{
模板
类Cmdarimetite:公共可计算
{
公众:
Cmdarimetite(常量字符串和nume):ComAndCalculate(nume)
{
}
void Execute()
{
cout>endl;
cin>>y>>endl;

cout
cmdarimetic
是在命名空间
Calculator::UI
中定义的,而
aplicie
是在命名空间
Calculator
中定义的。因此,您必须在
Calculator
命名空间中将
cmdarimetice
作为
UI::cmdarimetic
引用

至于说找不到
Suma
的错误,您还没有发布
Suma
的定义,因此很难说那里发生了什么,但请检查以确保它也没有在某个嵌套命名空间中定义

编辑:
cmdarimetite
的定义为

template<int Operatie(int, int)>
class CmdAritmetice : public ComandaCalcule
{
    // ...
};
显然,这不起作用,模板参数需要是与定义中指定的签名匹配的函数。此外,对
Suma
的引用需要限定为
Calcule::Suma

我想你打算做的是

UI::CmdAritmetice<Calcule::Suma<int>> cmd1("+");
UI::cmdarimetite cmd1(“+”);

如果我像这样修改行
UI::cmdarimetice cmd1(“+”);
我会得到错误C2514:“Calculator::UI::cmdarimetice”:类没有构造函数。但它在cmdarimetice.h
public:cmdarimetice(const string&nume):ComandaCalculate(nume){}
@Zodrak您没有显示您包含除
之外的任何标准库头,并且其中不包含
字符串的定义。如果没有
字符串的定义,编译器无法知道
“+”
可以转换为
string
@hvd我已经包括
string
,但没有任何变化。它说:“标识符cmdarimetite未定义”@ Zodrak如果你现在得到了一个不同的错误消息,那么事情就改变了…C++ C++是区分大小写的,你定义了类<代码> CMARDITMEDES/<代码>,而不是<代码> CMDARITMEDES> <代码> .@实际上,它没有。这个消息在我在CMDARITITIES上悬停鼠标时出现。当我尝试编译时,我得到了上面提到的错误。有人告诉我C++。耐心点,现在我明白了
template<int Operatie(int, int)>
class CmdAritmetice : public ComandaCalcule
{
    // ...
};
CmdAritmetice <int, Suma>
UI::CmdAritmetice<Calcule::Suma<int>> cmd1("+");