Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2011, 18:15   #1
alexsvk
 
Регистрация: 14.02.2011
Сообщений: 4
Восклицание Ошибки. Шаблоны.

template <typename T>
Set<T>& operator=(const Set<T>& s)
{
n = obj.n;
array = new T [n];
for (int i = 0; i < n; i++)
array[i] = obj.array[i];

return this;
}; (Указатель на ошибку)
Результат: d:\microsoft visual studio\myprojects\progr_2_sem\lr1\s tdafx.h(90) : error C2801: 'operator =' must be a <Unknown> member

template <typename T> (Указатель на ошибку)
bool Set<T>::isElem(T n)
{
for(int i = 0; i < n; i++)
if(array[i] == n)
return true;

return false;
};
Результат: d:\microsoft visual studio\myprojects\progr_2_sem\lr1\s tdafx.h(92) : error C2954: template definitions cannot nest

template <typename T>
Set<T> Set<T>::unionSets(const Set<T>& s)
{
int count = n + s.n;
int i = 0;

Set<T> tmpSet(count);

for(int k = 0; k < count; k++)
{
if(k < n)
{
tmpSet.array[i] = array[i];
i++;
}

if(k == n)
i = 0;

if ((k >= n) && (!(tmpSet.isElem(s.array[i])))
{
tmpSet.array[i] = s.array[i];
i++;
} (Здесь указатель на ошибку)

}

tmpSet.count = n + i;

return tmpSet;

};
Результат: d:\microsoft visual studio\myprojects\progr_2_sem\lr1\s tdafx.h(190) : error C2958: the left parenthesis '(' found at 'd:\microsoft visual studio\myprojects\progr_2_sem\lr1\s tdafx.h(186)' was not matched correctly

Вывод: нехрен чё-то добавлять! Знаю, знаю =)

Объясните, пожалуйста, ошибки.
alexsvk вне форума Ответить с цитированием
Старый 14.02.2011, 19:16   #2
kaljan775
:D
Форумчанин
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Сообщений: 570
По умолчанию

пожалуйста полный код
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery
kaljan775 вне форума Ответить с цитированием
Старый 14.02.2011, 20:35   #3
alexsvk
 
Регистрация: 14.02.2011
Сообщений: 4
По умолчанию полный код

Цитата:
Сообщение от kaljan775 Посмотреть сообщение
пожалуйста полный код
Написал два класса - шаблона: множества и итератор для оного.


// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//

#if !defined(AFX_STDAFX_H__610FB712_BEC F_4F04_9867_59889EDF1CB8__INCLUDED_ )
#define AFX_STDAFX_H__610FB712_BECF_4F04_98 67_59889EDF1CB8__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000


#include <iostream.h>

template <typename T>
class Iterator;

template <typename T>
class Set
{
protected:
T* array;
int n;

public:
Set(){}
Set(int);
Set(const Set<T>&);
~Set();

public:
Iterator<T>* createIterator()
{
Iterator<T>* it = new Iterator<T> (this);

return it;
}

void addElem(const T&);
bool removeElem(const T&);
bool isElem(T);

Set intersectionSets(const Set<T>&);
Set unionSets(const Set<T>&);
Set substracSets(const Set<T>&);

friend ostream& operator<<(ostream&, Set<T>&);
friend istream& operator>>(istream&, Set<T>&);
Set<T> operator=(const Set<T>&);

int getElemC()
{
return n;
}

int getElem(int in)
{
return array[in];
}
};

template <typename T>
Set<T>::Set(int c): n(c), array(new T [c]) {};

template <typename T>
Set<T>::Set(const Set<T>& obj)
{
n = obj.n;
array = new T [n];
for (int i = 0; i < n; i++)
array[i] = obj.array[i];
};

template <typename T>
Set<T>::~Set()
{
delete [] array;
};

template <typename T>
Set<T>& operator=(const Set<T>& s)
{
n = obj.n;
array = new T [n];
for (int i = 0; i < n; i++)
array[i] = obj.array[i];

return *this;
};

template <typename T>
bool Set<T>::isElem(T m)
{
for(int i = 0; i < m; i++)
if(array[i] == n)
return true;

return false;
};

template <typename T>
void Set<T>::addElem(const T& elem)
{
T* p = new T [n+1];
for (int i = 0; i < n+1; i++)
p[i] = array[i];
p[n+1] = elem;

delete [] array;
array = new T [++n];

for (i = 0; i < n; i++)
array[i] = p [i];

delete [] p;
};

template <typename T>
bool Set<T>::removeElem(const T& elem)
{
int pos = 0;

for(int i = 0; i < n && array[i] != elem; i++) {}

if (pos != n)
{
T* p = new T [n-1];

for(i = 0; i < n-1; i++)
p[i] = array[i<pos ? i:i+1];

delete [] array;
array = new T [--n];

for(i = 0; i < n; i++)
array[i] = p[i];
delete [] p;

return true;
}
else
return false;
};

template <typename T>
Set<T> Set<T>::intersectionSets(const Set<T>& s)
{
int count = 0;

n < s.n ? (Set<T> tmpSet(s.n)) : (Set<T> tmpSet(n));

for (int i = 0; i < n && i < s.n; i++)
{
if(array[i] == s.array[i])
{
tmpSet.array[i] = array[i];
count++;
}
}

tmpSet.n = count;

return tmpSet;
};

template <typename T>
Set<T> Set<T>::unionSets(const Set<T>& s)
{
int count = n + s.n;
int i = 0;

Set<T> tmpSet(count);

for(int k = 0; k < count; k++)
{
if(k < n)
{
tmpSet.array[i] = array[i];
i++;
}

if(k == n)
i = 0;

if ((k >= n) && (!(tmpSet.isElem(s.array[i])))
{
tmpSet.array[i] = s.array[i];
i++;
}

}

tmpSet.count = n + i;

return tmpSet;

};

template <typename T>
Set<T> Set<T>::substracSets(const Set<T>& s)
{
Set<T> tmpSet = this->intersectionSets(s);

Set<T> mainSet(this->n);
for (int i = 0; i < this->n; i++)
mainSet.array[i] = this->array[i];

for(int i = 0; i < tmpSet.count; i++)
{
if(mainSet.array[i] == tmpSet.array[i])
mainSet.removeElem(tmpSet.array[i]);
}

return mainSet;
};

template <typename T>
class Iterator
{
Set<T>* a;
int i;
public:
Iterator(Set<T>* p): a(p), i(0) {}

public:
void next()
{
if(i < a->getElemC()-1)
i++;
}

T getCurItem()
{
return a->getElem(i);
}

bool isMore()
{
if(i < a->getElemC() - 1)
return true;
else
return false;
}
};

template <typename T>
istream& operator>>(istream& stream, Set<T>& s)
{
int count = 0;
int m[256];

cout<<"Enter the first set: ";

for(int i = 0; i < 5; i++)
stream>>m[i];

s.array = new T [5];
s.n = 5;

for(i = 0; i < 5; i++)
s.array[i] = m[i];

return stream;
};

template <typename T>
ostream& operator<<(ostream& stream, Set<T>& s)
{
stream<<'{';
for(int i = 0; i < s.n; i++)
stream<<s.array[i]<<';';
stream<<'}';

return stream;
};




//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_STDAFX_H__610FB712_BEC F_4F04_9867_59889EDF1CB8__INCLUDED_ )
alexsvk вне форума Ответить с цитированием
Старый 15.02.2011, 14:10   #4
Д_М
Пользователь
 
Регистрация: 02.02.2011
Сообщений: 92
По умолчанию

У вас

Код:
template <typename T>
class Set
{
...
  Set<T> operator=(const Set<T>&);
};
...
template <typename T>
Set<T>& operator=(const Set<T>& s)
{
n = obj.n;
array = new T [n];
for (int i = 0; i < n; i++)
array[i] = obj.array[i];

return *this;
};
То есть operator= объявляется как метод класса, а затем определяется как шаблонная функция

Должно быть


Код:
template <typename T>
class Set
{
...
  Set& operator=(const Set&);
};
...
template <typename T>
Set<T>& Set<T>::operator=(const Set<T>& obj)
{
...
}
Ну и куча других ошибок
Д_М вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шаблоны Freddi Krjuger Общие вопросы C/C++ 6 14.11.2010 20:55
Шаблоны С++ Secc Помощь студентам 4 27.12.2009 17:35
Шаблоны, Си++ Нataша Помощь студентам 1 11.12.2009 01:35
Шаблоны bondik Общие вопросы C/C++ 10 04.05.2008 09:50