错误 C2065:模板函数中未声明的标识符
error C2065: undeclared identifier in template function
我是C++的新手,我试图把一个小项目放在轮子上,但我很难处理这些错误,我不知道我做错了什么。我想,我已经包含了所有必要的头文件。我做错了什么?
提前谢谢你!
d:filesvisual studio 2010projectscalculatoraplicatie.cpp(31): error C2065: 'CmdAritmetice' : undeclared identifier
d:filesvisual studio 2010projectscalculatoraplicatie.cpp(31): error C2062: type 'int' unexpected
d:filesvisual studio 2010projectscalculatoraplicatie.cpp(37): error C2065: 'cmd1' : undeclared identifier
d:filesvisual studio 2010projectscalculatoraplicatie.cpp(37): error C2228: left of '.Execute' must have class/struct/union
type is ''unknown-type''
编辑
如果我用UI::CmdAritmetice<Calcule::Suma<int>> cmd1("+");
修改CmdAritmetice <int, Suma> cmd1("+");
,则在尝试编译时会出现以下错误:
1>d:filesvisual studio 2010projectscalculatoraplicatie.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:filesvisual studio 2010projectscalculatoraplicatie.cpp(39): error C2660: 'Calculator::UI::CmdAritmetice<Operatie>::Execute' : function does not take 1 arguments
1> with
1> [
1> Operatie=0x0
1> ]
主.cpp
#include "aplicatie.h"
using namespace Calculator;
int main()
{
Aplicatie app;
app.Run();
return 0;
}
应用程序.cpp编辑
#include <iostream>
#include "aplicatie.h"
#include "Calculeoperatii.h"
#include "UIcmdaritmetice.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);
}
}
CMDARITMETICE.h
#ifndef ARITMETICE_H
#define ARITMETICE_H
#include "UIcomanda.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
乐
**operatii.h**
#ifndef OPERATII_H
#define OPERATII_H
namespace Calculator{
namespace Calcule{
template<typename T>
T Suma(T x, T y)
{
return x + y;
}
}
#endif
CmdAritmetice
在命名空间Calculator::UI
中定义,而Aplicatie
在命名空间Calculator
中定义。因此,您必须将CmdAritmetice
称为Calculator
命名空间中的UI::CmdAritmetice
。
至于错误说找不到Suma
,你还没有发布Suma
的定义,所以很难说那里发生了什么,但检查以确保它也没有定义在某个嵌套命名空间中。
编辑:CmdAritmetice
的定义是
template<int Operatie(int, int)>
class CmdAritmetice : public ComandaCalcule
{
// ...
};
所以它需要一个模板参数,它是带有签名int(int, int)
的函数,即一个接受 2 int
s 并返回一个 int
的函数。在Aplicatie::Run()
中,您尝试将类实例化为
CmdAritmetice <int, Suma>
显然这是行不通的,模板参数必须是与您在定义中指定的签名匹配的函数。此外,对Suma
的引用需要限定为 Calcule::Suma
。
我认为你打算做的是
UI::CmdAritmetice<Calcule::Suma<int>> cmd1("+");
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- Google protobuf 时间戳未声明标识符,在 Windows 上具有C++
- 我的函数调用 (C++) 中的未声明标识符
- 具有继承的未声明标识符(运算符 ostream)
- 无法确定 IDE 在 C++ 中说出未声明标识符的原因
- 错误 C2065:'lO':用于声明向量值的未声明标识符?
- 可变参数模板的未声明标识符
- 动态变量上的c++MACRO未声明标识符
- 指向对象的指针的未声明标识符向量
- 简单C++程序上的多个未声明标识符
- C++类"未声明标识符"
- 计算文本文件中的整数数(使用 fin>>x 的未声明标识符)
- 编译器错误 xcode 未声明标识符 C++
- 直接 X 11 纹理 FX 文件错误 X3004 未声明标识符"input"
- GCC 未声明标识符"_asm"
- ios_base类的C++未声明标识符
- 未声明标识符SQL_SS_TABLE
- 使用arrayfire的未声明标识符
- 未声明标识符和标识符未定义是什么意思?如何修复错误
- 在 MacOS 上使用 OpenMPI C++语法时未声明标识符'MPI'