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

Есть объект типа T, но если вместо него подставить вызов функции, возвращающей T, код не компилится, почему? - C++

Восстановить пароль Регистрация
 
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
28.03.2012, 12:11     Есть объект типа T, но если вместо него подставить вызов функции, возвращающей T, код не компилится, почему? #1
Есть объект типа vector<int>, но если вместо него подставить вызов функции, возвращающей vector<int>, код не компилится (template мутит воду), почему?

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
#include <windows.h>
#include <stdio.h>
#include <vector>
using namespace std;
 
 
//Всё просто вот класс
template <class T, template <class, class > class t, class t_= allocator<T> >
class klass  {
 public:
  klass (t<T, t_>& prom){;};
};
 
 
Функция, возвращающая vector<int>
vector <int> f () {
 vector<int> kazhdoe_pole;
 return kazhdoe_pole ;
} 
 
 
int main () {
 
//Тут всё круто 
vector<int> p;
klass<int, vector> klass_(p);
p= f();
 
//А вот тут, если раскомменитить, не компилится! 
// klass<int, vector> klass__(f());
 
 getchar ();
 return 0;
}
Ошибки такие:
no matching function for call to 'klass<int, std::vector>::klass(std::vector<int>)

Ну и чё всё это значит? Спасибо, кто откликнется
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.03.2012, 12:11     Есть объект типа T, но если вместо него подставить вызов функции, возвращающей T, код не компилится, почему?
Посмотрите здесь:

Записать программу, содержащую шаблон функции, возвращающей сумму квадрата и куба числа любого числового типа C++
Почему нехорошо себя ведёт конструктор класса (не компилится ничё), если ему параметром ссылку на константу? C++
C++ Класс содержащий объект типа ofstream - не компилится!
Оптимизирует ли компилятор код при использовании функции, возвращающей константу? C++
Если функция находит в строке число, то вместо него она переписывает в выходную строку соответствующее по счету слово из входной строки C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
28.03.2012, 12:19     Есть объект типа T, но если вместо него подставить вызов функции, возвращающей T, код не компилится, почему? #2
Если я правильно вас понял, то проблема в этом
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
#include <iostream>
#include <vector>
 
struct Foo
{
    Foo(std::vector<int>&)
    {
 
    }
};
 
std::vector<int>& func1()
{
    std::vector<int> v;
    return v;
}
 
std::vector<int> func2()
{
    std::vector<int> v;
    return v;
}
 
int main()
{
    Foo f1(func1());
    //Foo f2(func2());
}
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
28.03.2012, 12:30  [ТС]     Есть объект типа T, но если вместо него подставить вызов функции, возвращающей T, код не компилится, почему? #3
Нет. Проблема в том, как мне вместо вектора подставить вызов функции, этот вектор возвращающей. Да не абы куда, а в конструктор объекта шаблонного класса; определение класса я дал.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
28.03.2012, 12:34     Есть объект типа T, но если вместо него подставить вызов функции, возвращающей T, код не компилится, почему? #4
kravam, у вас функция возвращает значение, а конструктор принимает ссылку.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
28.03.2012, 12:38     Есть объект типа T, но если вместо него подставить вызов функции, возвращающей T, код не компилится, почему? #5
kravam, по константной ссылке надо принимать. Функция возвращает временный объект, который по стандарту может быть принят либо по значению, либо по константной ссылке.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
28.03.2012, 12:47  [ТС]     Есть объект типа T, но если вместо него подставить вызов функции, возвращающей T, код не компилится, почему? #6
другой коленкор
Yandex
Объявления
28.03.2012, 12:47     Есть объект типа T, но если вместо него подставить вызов функции, возвращающей T, код не компилится, почему?
Ответ Создать тему
Опции темы

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