gpt4 book ai didi

c++ - 错误 C2065 : undeclared identifier in template function

转载 作者:太空宇宙 更新时间:2023-11-04 13:57:15 26 4
gpt4 key购买 nike

我是 C++ 的新手,我正试图将一个小项目放在轮子上,但我很难解决这些错误,而且我不知道自己做错了什么。我想,我已经包含了所有必要的头文件。我做错了什么?

提前致谢!

d:\files\visual studio 2010\projects\calculator\aplicatie.cpp(31): error C2065: 'CmdAritmetice' : undeclared identifier

d:\files\visual studio 2010\projects\calculator\aplicatie.cpp(31): error C2062: type 'int' unexpected

d:\files\visual studio 2010\projects\calculator\aplicatie.cpp(37): error C2065: 'cmd1' : undeclared identifier

d:\files\visual studio 2010\projects\calculator\aplicatie.cpp(37): error C2228: left of '.Execute' must have class/struct/union

type is ''unknown-type''

编辑

如果我修改CmdAritmetice <int, Suma> cmd1("+");UI::CmdAritmetice<Calcule::Suma<int>> 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> ]

main.cpp

#include "aplicatie.h"
using namespace Calculator;

int main()

{
Aplicatie app;
app.Run();
return 0;
}

aplicatie.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);
}
}

cmdaritmetice.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

LE

**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 中定义。因此,您必须在 Calculator 命名空间中将 CmdAritmetice 称为 UI::CmdAritmetice

至于错误说 Suma 找不到,你还没有发布 Suma 的定义,所以很难说那里发生了什么,但是检查一下确保它也没有在某些嵌套命名空间中定义。

编辑:
CmdAritmetice 的定义是

template<int Operatie(int, int)>
class CmdAritmetice : public ComandaCalcule
{
// ...
};

因此它需要一个模板参数,该参数是具有签名 int(int, int) 的函数,即接受 2 个 int 并返回一个 的函数整数。在 Aplicatie::Run() 中,您尝试将类实例化为

CmdAritmetice <int, Suma>

显然这是行不通的,模板参数需要是一个与您在定义中指定的签名相匹配的函数。此外,对 Suma 的引用需要限定为 Calcule::Suma

我认为你打算做的是

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

关于c++ - 错误 C2065 : undeclared identifier in template function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20914434/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com