Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Заблокирован
1

Ошибка при создании шаблонной функции:"error C2075: temp: для инициализации массива требуются фигурные скобки"

29.07.2014, 18:53. Показов 2530. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
template <typename T> int GnomeSort(T* p, int length)
{
    int i, count;
 
    i = 0;
    count = 0;
 
    while(i < length)
    {
        if(i == 0 || p[i] >= p[i - 1]) ++i;
        else
        {
            T temp = p[i - 1];
            p[i - 1] = p[i];
            p[i] = temp;
            --i;
        }
 
        count++;
    }
 
    return count;
}
Здравствуйте, прошу помощи, почему не работает код. Проект собирал в "MicroSoft Visual Studio 2010".
Ошибка 1 error C2075: temp: для инициализации массива требуются фигурные скобки c:\documents and settings\admin\мои документы\visual studio 2010\projects\test\test\main.cpp 29
Ошибка 2 error C2106: =: левый операнд должен быть левосторонним значением c:\documents and settings\admin\мои документы\visual studio 2010\projects\test\test\main.cpp 30
Ошибка 3 error C2106: =: левый операнд должен быть левосторонним значением c:\documents and settings\admin\мои документы\visual studio 2010\projects\test\test\main.cpp 31
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.07.2014, 18:53
Ответы с готовыми решениями:

Ошибка при создании шаблонной функции
template &lt;typename T&gt; int unique_count(const std::vector&lt;T&gt; &amp;vec){ } int main() { std::cout...

Фигурные скобки: Мне пишут что ошибка в закрытие скобки после return.
#include &lt;iostream&gt; using namespace std; int main(){ int *ptr_number = new int; int *sum =...

Ошибка при создании шаблонной очереди (LNK2019 ссылка на неразрешенный внешний символ)
Привет :) Помогите найти ошибку при создании шаблонного класса. Искал синтаксис в интернете, всё...

Ошибка в коде фигурные скобки
Воткнул несколько лишних фигурных скобок или не поставил где-то. Удаляю одну возникает ошибка со...

Ошибка при создании инициализации бота в классе
Уважаемые знатоки, учусь писать телеграмм ботов. Использую библиотеку TelegramBotApi. Пытаюсь...

15
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
29.07.2014, 18:56 2
В качестве T какой тип выступает?
0
Заблокирован
29.07.2014, 19:08  [ТС] 3
Пробовал с "string" и "int", ошибки одинаковые.
0
18842 / 9841 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
29.07.2014, 19:12 4
Stason676, код из main.cpp тоже покажи пожалуйста.
0
Заблокирован
29.07.2014, 19:13  [ТС] 5
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
#include <iostream>
#include <string>
 
template <typename T> int GnomeSort(T*, int);
 
int main(int argc, char* argv[])
{
    std::string s = "23451";
    int count = GnomeSort(&s, 5);
 
    int a[5] = { 2, 3, 4, 5, 1 };
    int count2 = GnomeSort(&a, 5);
 
    return 0;
}
 
template <typename T> int GnomeSort(T* p, int length)
{
    int i, count;
 
    i = 0;
    count = 0;
 
    while(i < length)
    {
        if(i == 0 || p[i] >= p[i - 1]) ++i;
        else
        {
            T temp = p[i];
            p[i] = p[i - 1];
            p[i - 1] = temp;
            --i;
        }
 
        count++;
    }
 
    return count;
}
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
29.07.2014, 19:16 6
Первый вариант не сработает. Во втором убери амперсанд (&).
1
Заблокирован
29.07.2014, 19:19  [ТС] 7
Почему?
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
29.07.2014, 19:21 8
Потому что передастся указатель на string, по этому указателю только в p[0] будет валидный элемент.
1
Заблокирован
29.07.2014, 19:27  [ТС] 9
Возможно ли написать шаблон для сортировки всего. Спасибо.
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,493
Записей в блоге: 1
29.07.2014, 19:31 10
Stason676, так ты и написал шаблон для сортировки всех массивов! Но string это не массив же!
1
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
29.07.2014, 19:38 11
Вот такую строку можно отсортировать твоим алгоритмом:
C++
1
2
char str[] = "jdurbfofywn";
GnomeSort( &str[0], strlen( str ) );
1
18842 / 9841 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
29.07.2014, 19:38 12
Цитата Сообщение от castaway Посмотреть сообщение
по этому указателю только в p[0] будет валидный элемент.
Причем и это не факт.
1
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
29.07.2014, 19:44 13
DrOffset, почему?
1
18842 / 9841 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
29.07.2014, 19:59 14
Цитата Сообщение от castaway Посмотреть сообщение
DrOffset, почему?
Да меня переклинило чего-то. Почему-то подумал про вот такой хак:
C++
1
2
3
4
5
6
7
8
9
10
#include <string>
 
int main ()
{
    std::string str = "test";
 
    char * p = (char*)&str;
 
    std::cout << p[0];
}
пару раз встречал такое, использовалось в расчете на то, что внутренний буфер расположен в самом начале класса.
Иногда там могут быть данные, но чаще всего там мусор, ибо зависит от многих вещей, выравнивания, оптимизации, способа организации внутренностей std::string и т.п.
В общем - штанга. Я только с работы, еще в своих мыслях
1
Заблокирован
30.07.2014, 15:11  [ТС] 15
Всем спасибо за ответы!
0
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
30.07.2014, 15:43 16
Цитата Сообщение от Stason676 Посмотреть сообщение
Возможно ли написать шаблон для сортировки всего. Спасибо.
Возможно ( ну, т.е. конечно не всего, а только того, что обладает семантикой массивов, т.е. имеет operator[] ). Надо лишь сделать небольшие изменения:

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 <iostream>
#include <string>
 
template <typename T> int GnomeSort( T&, int );
 
int main( int argc, char* argv[] ) {
  std::string s = "23451";
  int count = GnomeSort( s, 5 );
 
  int a[ 5 ] = { 2, 3, 4, 5, 1 };
  int count2 = GnomeSort( a, 5 );
 
  return 0;
}
 
template <typename T> 
int GnomeSort( T& p, int length ) {
  int i = 0;
  int count = 0;
 
  while( i < length ) {
    if( i == 0 || p[ i ] >= p[ i - 1 ] ) ++i;
    else {
      auto temp = p[ i ];
      p[ i ] = p[ i - 1 ];
      p[ i - 1 ] = temp;
      --i;
    }
 
    count++;
  }
 
  return count;
}
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Но string это не массив же!
Ну это как посмотреть, для данного алгоритма вполне себе массив
1
30.07.2014, 15:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.07.2014, 15:43
Помогаю со студенческими работами здесь

Фигурные скобки при выводе переменных
Подскажите пожалуйста, как выводить переменные в фигурных скобках, например: {name}

Особенность инициализация значений массива через фигурные скобки
снова какая то лезгинка: никогда об этом не задумывался, просто помнил что количество элементов =...

Как убрать фигурные скобки при выводе в виджет?
Вот такой вот код, при выводе информации в виджет вылазят фигурные скобки. Как это можно исправить?...

Ошибка при сборке перегруженной шаблонной функции
Привет Есть перегруженная шаблонная функция с приведением типов. Перегрузка состоит в вариантах...

Фигурные скобки охватывают выражение. Для чего?
Добрый день! Что означают фигурные скобки по краям в выражении ниже? Я насколько знаю, между ними...

Для чего фигурные скобки в приведенном коде
Перехожу от c++ на java и появился один вопрос по синтаксису. public class Main{ ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru