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

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

Восстановить пароль Регистрация
 
Stason676
Заблокирован
29.07.2014, 18:53     Ошибка при создании шаблонной функции:"error C2075: temp: для инициализации массива требуются фигурные скобки" #1
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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.07.2014, 18:53     Ошибка при создании шаблонной функции:"error C2075: temp: для инициализации массива требуются фигурные скобки"
Посмотрите здесь:

Сортировка одномерного массива и ошибка "error C2065: _ необъявленный идентификатор" C++
error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "fprot" C++
C++ Ошибка "неверный тип для индекса массива" при работе с двумерным массивом
C++ Ошибка "Необъявленный идентификатор" при создании конструктора в наследственном классе
C++ Ошибка при компиляции In function"int main()"; expected ';', before "cin", [Build Error] [main.o] Error 1
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4841 / 2980 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 10
Завершенные тесты: 1
29.07.2014, 18:56     Ошибка при создании шаблонной функции:"error C2075: temp: для инициализации массива требуются фигурные скобки" #2
В качестве T какой тип выступает?
Stason676
Заблокирован
29.07.2014, 19:08  [ТС]     Ошибка при создании шаблонной функции:"error C2075: temp: для инициализации массива требуются фигурные скобки" #3
Пробовал с "string" и "int", ошибки одинаковые.
DrOffset
6424 / 3798 / 879
Регистрация: 30.01.2014
Сообщений: 6,591
29.07.2014, 19:12     Ошибка при создании шаблонной функции:"error C2075: temp: для инициализации массива требуются фигурные скобки" #4
Stason676, код из main.cpp тоже покажи пожалуйста.
Stason676
Заблокирован
29.07.2014, 19:13  [ТС]     Ошибка при создании шаблонной функции:"error C2075: temp: для инициализации массива требуются фигурные скобки" #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;
}
castaway
Эксперт С++
4841 / 2980 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 10
Завершенные тесты: 1
29.07.2014, 19:16     Ошибка при создании шаблонной функции:"error C2075: temp: для инициализации массива требуются фигурные скобки" #6
Первый вариант не сработает. Во втором убери амперсанд (&).
Stason676
Заблокирован
29.07.2014, 19:19  [ТС]     Ошибка при создании шаблонной функции:"error C2075: temp: для инициализации массива требуются фигурные скобки" #7
Почему?
castaway
Эксперт С++
4841 / 2980 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 10
Завершенные тесты: 1
29.07.2014, 19:21     Ошибка при создании шаблонной функции:"error C2075: temp: для инициализации массива требуются фигурные скобки" #8
Потому что передастся указатель на string, по этому указателю только в p[0] будет валидный элемент.
Stason676
Заблокирован
29.07.2014, 19:27  [ТС]     Ошибка при создании шаблонной функции:"error C2075: temp: для инициализации массива требуются фигурные скобки" #9
Возможно ли написать шаблон для сортировки всего. Спасибо.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
29.07.2014, 19:31     Ошибка при создании шаблонной функции:"error C2075: temp: для инициализации массива требуются фигурные скобки" #10
Stason676, так ты и написал шаблон для сортировки всех массивов! Но string это не массив же!
castaway
Эксперт С++
4841 / 2980 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 10
Завершенные тесты: 1
29.07.2014, 19:38     Ошибка при создании шаблонной функции:"error C2075: temp: для инициализации массива требуются фигурные скобки" #11
Вот такую строку можно отсортировать твоим алгоритмом:
C++
1
2
char str[] = "jdurbfofywn";
GnomeSort( &str[0], strlen( str ) );
DrOffset
6424 / 3798 / 879
Регистрация: 30.01.2014
Сообщений: 6,591
29.07.2014, 19:38     Ошибка при создании шаблонной функции:"error C2075: temp: для инициализации массива требуются фигурные скобки" #12
Цитата Сообщение от castaway Посмотреть сообщение
по этому указателю только в p[0] будет валидный элемент.
Причем и это не факт.
castaway
Эксперт С++
4841 / 2980 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 10
Завершенные тесты: 1
29.07.2014, 19:44     Ошибка при создании шаблонной функции:"error C2075: temp: для инициализации массива требуются фигурные скобки" #13
DrOffset, почему?
DrOffset
6424 / 3798 / 879
Регистрация: 30.01.2014
Сообщений: 6,591
29.07.2014, 19:59     Ошибка при создании шаблонной функции:"error C2075: temp: для инициализации массива требуются фигурные скобки" #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 и т.п.
В общем - штанга. Я только с работы, еще в своих мыслях
Stason676
Заблокирован
30.07.2014, 15:11  [ТС]     Ошибка при создании шаблонной функции:"error C2075: temp: для инициализации массива требуются фигурные скобки" #15
Всем спасибо за ответы!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.07.2014, 15:43     Ошибка при создании шаблонной функции:"error C2075: temp: для инициализации массива требуются фигурные скобки"
Еще ссылки по теме:

Error C2361: пропуск инициализации "Height" из-за метки "default" C++
C++ При компиляции кода вылазит ошибка "error C2027: use of undefined type 'SldWorks'"
C++ Ошибка при подключении заголовочного файла: "error LNK2019: unresolved external symbol"

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

Или воспользуйтесь поиском по форуму:
Voivoid
 Аватар для Voivoid
580 / 256 / 12
Регистрация: 31.03.2013
Сообщений: 1,283
30.07.2014, 15:43     Ошибка при создании шаблонной функции:"error C2075: temp: для инициализации массива требуются фигурные скобки" #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 это не массив же!
Ну это как посмотреть, для данного алгоритма вполне себе массив
Yandex
Объявления
30.07.2014, 15:43     Ошибка при создании шаблонной функции:"error C2075: temp: для инициализации массива требуются фигурные скобки"
Ответ Создать тему
Опции темы

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