Форум программистов, компьютерный форум CyberForum.ru

<Template>. Ошибка компиляции - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Объясните пожалуйста что делает функция http://www.cyberforum.ru/cpp-beginners/thread607726.html
и если это какая то формула, то можно ссылку на неё int letterFromNumber(int number, int index, int n) { int num = number / (int)pow((double)n,index); return num % n; }
C++ inline функции vs инструкции inline функций Здравствуйте. Чтобы не писать повторно код, нужно использовать функции. Но если функции компактные, то их лучше делать inline функциями, т. к. inline функции быстрее обычных. Но как я понимаю, inline функции все равно работают медленнее, чем их инструкции, вставленные на место их вызова. Так ли это? И каким образом создаются локальные переменные inline функций, ведь в стеке нового блока при их... http://www.cyberforum.ru/cpp-beginners/thread607722.html
Различие глобальной и глобальной статической переменной C++
у нас есть заголовочный файл со стражами, допустим global.h , его используют несколько других хейдеров и с++ файлов . когда там описаны переменные без оператора static линковщик выдаёт ошибку что это переменная объявлена там то там то. если static стоит , то такой проблемы не возникает. в чём различие при объявление глобальной и глобальной статической переменной?
Функционально-подобные макросы C++
Есть переменная std::string Log; и есть другие переменные, или параметры функции. Например, int x; int y; Можно ли написать макрос, заменяющий Log<<LOG(x); на Log<<"<x>"<<std::endl<<"<value>"<<x<<"</value>"<<std::endl<<"<adress>"<<(void *)&x<<"</adress>"<<std::endl<<"</x>"<<std::endl;, а Log<<LOG(y); на Log<<"<y>"<<std::endl<<"<value>"<<y<<"</value>"<<std::endl<<"<adress>"<<(void...
C++ Деление комплексных чисел http://www.cyberforum.ru/cpp-beginners/thread607690.html
Вот код #include <iostream> #include <math> using namespace std; typedef struct { float re, im; } cmplx; cmplx cmplx_div( cmplx c, cmplx d ){ float r, p; cmplx res;
C++ Контроль ошибок при вводе Появился такой вопрос..как проконтролировать пользователя чтоб тот не вводил где не надо символы. if(cin.fail()) cout<<"Только число!\n"; попробывал по такому принципу не получилось..может кто подскажет как лучше всего реализовать данный вопрос?) подробнее

Показать сообщение отдельно
Leeto
 Аватар для Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
17.06.2012, 16:11     <Template>. Ошибка компиляции
Пытаюсь сделать Темплате Array, который бы принимал класс Point. Объект класса Point состоит из 2х точек координаты x и y. Мне надо создавать объект динамически по заданию. Компилятор выдает след ошибку. Код программы ниже. Пожалуйста, подскажите как мне надо переделать код.

log
1> TestArray.cpp
1>c:\all my\с++\ha level 6\solution\level 6\hp_4.2a\array.cpp(13): error C2065: 'm_data' : undeclared identifier
1> c:\all my\с++\ha level 6\solution\level 6\hp_4.2a\array.cpp(11) : while compiling class template member function 'Array<Type>::Array(void)'
1> with
1> [
1> Type=Point
1> ]
1> TestArray.cpp(23) : see reference to class template instantiation 'Array<Type>' being compiled
1> with
1> [
1> Type=Point
1> ]
1>c:\all my\с++\ha level 6\solution\level 6\hp_4.2a\array.cpp(30): error C2065: 'm_data' : undeclared identifier
1> c:\all my\с++\ha level 6\solution\level 6\hp_4.2a\array.cpp(26) : while compiling class template member function 'void Array<Type>::SetElement(Type &,int)'
1> with
1> [
1> Type=Point
1> ]
1>c:\all my\с++\ha level 6\solution\level 6\hp_4.2a\array.cpp(31): error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'Point' (or there is no acceptable conversion)
1> c:\Program Files\Microsoft Visual Studio 10.0\VC\include\ostream(679): could be 'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files\Microsoft Visual Studio 10.0\VC\include\ostream(726): or 'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,char)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files\Microsoft Visual Studio 10.0\VC\include\ostream(764): or 'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files\Microsoft Visual Studio 10.0\VC\include\ostream(811): or 'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,char)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files\Microsoft Visual Studio 10.0\VC\include\ostream(937): or 'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const signed char *)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files\Microsoft Visual Studio 10.0\VC\include\ostream(944): or 'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,signed char)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files\Microsoft Visual Studio 10.0\VC\include\ostream(951): or 'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const unsigned char *)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files\Microsoft Visual Studio 10.0\VC\include\ostream(958): or 'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,unsigned char)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files\Microsoft Visual Studio 10.0\VC\include\ostream(968): or 'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>,Type>(std::basic_ostream<_Elem,_Traits> &&,_Ty)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> Type=Point,
1> _Ty=Point
1> ]
1> c:\Program Files\Microsoft Visual Studio 10.0\VC\include\ostream(1085): or 'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const std::error_code &)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files\Microsoft Visual Studio 10.0\VC\include\ostream(186): or 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_ostream<_Elem,_Traits> &(__cdecl *)(std::basic_ostream<_Elem,_Traits> &))'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files\Microsoft Visual Studio 10.0\VC\include\ostream(192): or 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_ios<_Elem,_Traits> &(__cdecl *)(std::basic_ios<_Elem,_Traits> &))'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files\Microsoft Visual Studio 10.0\VC\include\ostream(199): or 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::ios_base &(__cdecl *)(std::ios_base &))'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files\Microsoft Visual Studio 10.0\VC\include\ostream(206): or 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::_Bool)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files\Microsoft Visual Studio 10.0\VC\include\ostream(226): or 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(short)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files\Microsoft Visual Studio 10.0\VC\include\ostream(260): or 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned short)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files\Microsoft Visual Studio 10.0\VC\include\ostream(280): or 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(int)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files\Microsoft Visual Studio 10.0\VC\include\ostream(305): or 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned int)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files\Microsoft Visual Studio 10.0\VC\include\ostream(325): or 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(long)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files\Microsoft Visual Studio 10.0\VC\include\ostream(345): or 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned long)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files\Microsoft Visual Studio 10.0\VC\include\ostream(366): or 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(__int64)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files\Microsoft Visual Studio 10.0\VC\include\ostream(386): or 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned __int64)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files\Microsoft Visual Studio 10.0\VC\include\ostream(407): or 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(float)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files\Microsoft Visual Studio 10.0\VC\include\ostream(427): or 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(double)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files\Microsoft Visual Studio 10.0\VC\include\ostream(447): or 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(long double)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files\Microsoft Visual Studio 10.0\VC\include\ostream(467): or 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(const void *)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files\Microsoft Visual Studio 10.0\VC\include\ostream(487): or 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_streambuf<_Elem,_Traits> *)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> while trying to match the argument list '(std::basic_ostream<_Elem,_Traits>, Point)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1>c:\all my\с++\ha level 6\solution\level 6\hp_4.2a\array.cpp(49): error C2065: 'm_data' : undeclared identifier
1> c:\all my\с++\ha level 6\solution\level 6\hp_4.2a\array.cpp(40) : while compiling class template member function 'const Point &Array<Type>::GetElement(int) const'
1> with
1> [
1> Type=Point
1> ]
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
// Array.h
// Templated Array class containging 
#include <sstream>
#include <iostream>
 
#ifndef Array_H
#define Array_H
 
template <class Type=double> class Array
{
private:
int m_size; 
 
public:
Array();
Array(int new_size); 
void SetElement(Type& type_object, int index); 
const Type& GetElement(int index) const; 
};
 
 
#ifndef Array_cpp 
#include "array.cpp"
#endif
 
#endif
 
//*********************
 
//array.cpp
#include "array.h"
#include <sstream>
#include <iostream>
using namespace std;
#ifndef Array_CPP
#define Array_CPP
 
template <class Type>
Array<Type>::Array()                                     
{
    m_size = 10;
     m_data = new Type[m_size];
}
 
template <class Type> 
Array<Type>::Array(int new_size)                    
{
    new_size = m_size;
    m_data = new Type[m_size];
}
 
 
template <class Type> 
void Array<Type>::SetElement(Type& type_object, int index)
{
    try
    {
        if (index >= m_size){throw 11;} 
        m_data[index] = type_object;
        cout << "Set Element " << type_object  << endl;
    }
     catch (int x )
     {
        cout << "ERROR" << x << " ignore the set, because index of element bigger then massive size"<< endl;
     }
}
template <class Type> 
const Type& Array<Type>::GetElement(int index) const
{
    try 
    {
        if (index > m_size || index < 0){ throw 1;} 
    } 
    catch (double x)
    {
    cout << "index incorrect, index too big or too small " << x << endl; 
    }  
    return m_data[index];
}
#endif Array_CPP
 
//********************
 
        //main.cpp
        #include <iostream>
        #include <sstream>
        #include "array.h"
        using namespace std;
 
    class Point
{
private:
    double m_x;                                
    double m_y;                                
public:
    // Constructors
    Point(): m_x(0), m_y(0) {};                            
    Point(double new_x, double new_y) : m_x(new_x), m_y(new_y) {};
};
 
 
        int main()
        {
            Point *p1 = new Point (1,12);
                cout << endl; 
            Array<Point> arr1[1];
            arr1[1].SetElement(*p1,0);
                cout << endl;
            arr1[1].GetElement(0) ; 
            delete p1;
            return 0;
        }
Добавлено через 25 минут
мне кажется что в приват для тимплейта надо еще добавить наряду с m_size

C++
1
2
3
private: 
 
Type* m_data;
Еще наверное надо пояснить что хочется чтоб программа выполняла следующее.
1. Создается объекта какого ниб класса
2. Создается типлейт (очень похожий на вектор)
3. Этот объект пихается в этот вектор под индексом ноль или 1 function SetElement
4. И вызову функции GetElement выводит объект на экран.

Пожалуйста помогите !
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 04:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru