Я новичок в C++, и я пытаюсь создать небольшой проект на колесах, но мне сложно с этими ошибками, и я не знаю, что я «Я делаю неправильно. Я думаю, что я включил все заголовочные файлы. Что я делаю неправильно?ошибка C2065: необъявленный идентификатор в функции шаблона
Спасибо заранее!
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);
}
}
с mdaritmetice.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
Если я изменить строку, как этот 'UI :: CmdAritmetice cmd1 ("+");' я получаю ошибки C2514: «Калькулятор :: UI: : CmdAritmetice ': class не имеет конструкторов. Но это в cmdaritmetice.h 'общественность: CmdAritmetice (константную строка & Nume): ComandaCalcule (Nume) \t \t {}' –
Zodrak
@Zodrak Вы не показывайте, что вы включили любые стандартные, кроме '', и библиотечных коллекторов в одном не содержится определения 'string'. Без определения 'string' компилятор не может знать, что' '+" 'можно преобразовать в' string'. –
hvd
@hvd Я включил 'string', но ничего не меняется. он говорит: «Идентификатор cmdAritmetice undefined» – Zodrak