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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.85
persalena
0 / 0 / 0
Регистрация: 02.12.2008
Сообщений: 23
#1

Невозможно преобразовать "const char" в "char" - C++

06.09.2009, 10:01. Просмотров 3561. Ответов 6
Метки нет (Все метки)

Вот код:
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
void vvod()
{
    char name_of_file[100];
    int i;
    char linetype1[50];
    char linetype2[50];
    int razmer_pera;
    struct colour
    {
        int red;
        int green;
        int blue;
    };
    colour colour_of_pen;
    printf("Введите путь к файлу");
    scanf("%s",&name_of_file);
    fp=fopen (name_of_file, "r");
    if (fp==NULL)
    {
        perror("fopen");
        exit(1);
    }
    for(i=0;i<4;i++)
    {
        fscanf(fp, "%d", &coordinate[i][0]);
        fscanf(fp, "%d", &coordinate[i][1]);
    }
    fscanf(fp,"%s",&linetype1);
    if (linetype1 == "sploshnaya") 
        linetype2 = "PS_SOLID";
    if (linetype1 == "punktir")
        linetype2 = "PS_DASH";
    if(linetype1 == "shtrih")
        linetype2 = "PS_DOT";
    if (linetype1 == "shtrihpunktir1")
        linetype2 = "PS_DASHDOT";
    if (linetype1 == "shtrihpunktir2")
        linetype2 = "PS_DASHDOTDOT";
    if (linetype1 == "nevidimaya")
        linetype2 = "PS_NULL";
    if (linetype1 == "obvodka")
        linetype2 = "PS_INSIDEFRAME";
    
    fscanf(fp,"%d",&razmer_pera);
 
 
 
 
    fclose(fp);
}
Visual 2008 ругается такой ошибкой:
error C2440: =: невозможно преобразовать 'const char [9]' в 'char [50]'
1> Не существует контекста, в котором такое преобразование возможно

и таких семь штук.

В чем ошибка? Почему я не могу вставить в массив строку?

P.S. Если linetype2 определить как const char - все равно не помогает...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2009, 10:01     Невозможно преобразовать "const char" в "char"
Посмотрите здесь:
Ошибка 6 error C2664: strtok: невозможно преобразовать параметр 1 из "const char *" в "char *" C++
Error C2440: return: невозможно преобразовать "const char *" в "const char (&)[6]" C++
error C2664: strcmp: невозможно преобразовать параметр 1 из "char (*)[20]" в "const char *" C++
C++ Невозможно преобразовать параметр 2 из "char" в "const char *"
невозможно преобразовать параметр 1 из "const char [8]" в "LPCWSTR" C++
Невозможно преобразовать параметр 1 из "const wchar_t [12]" в "const char *" C++
C++ Преобразовать параметр из "WCHAR [260]" в "const char *"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6477 / 2252 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
06.09.2009, 10:15     Невозможно преобразовать "const char" в "char" #2
persalena, а Вы со строками в С вообще учились работать? Че за сравнение такое ==? Нынче адреса модно сравнивать? А присваивание что за такое =?
А ну быстро читай про функции работы со строками! strcmp, strncpy и прочие.
persalena
0 / 0 / 0
Регистрация: 02.12.2008
Сообщений: 23
06.09.2009, 10:31  [ТС]     Невозможно преобразовать "const char" в "char" #3
Ой, точно! Спасибо большое!!!!
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
06.09.2009, 10:46     Невозможно преобразовать "const char" в "char" #4
const_cast
C++
1
2
const char x = 'a';
*(const_cast<char*>(&x)) = 'b';
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
06.09.2009, 11:49     Невозможно преобразовать "const char" в "char" #5
Адреса сравнивать можно. Об этом написно в K&R, думаю, что и у других авторов тоже.
...Справедливости ради скажу, что допускается сравнение указателей на одинаковый тип.
Думаю, это всё-таки наш случай. Ибо содержание указателя есть адрес. Так что
C
1
linetype1/*адрес переменной типа char*/ == "sploshnaya"/*тоже адрес переменной типа char"*/
Нормально будет

Другое дело, что делать это бессмысленно. Ибо, я так понял, тебе важно сравнить между собой содержания строк. Но не по каким адреса они располагаются.
Gravity
562 / 556 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
06.09.2009, 12:05     Невозможно преобразовать "const char" в "char" #6
string вроде можно сравнивать как ==, хотя не помню точно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.09.2009, 03:37     Невозможно преобразовать "const char" в "char"
Еще ссылки по теме:
C++ IntelliSense: несовместимые типы операндов ("char" и "const char *")
Ошибка при сборке многофайлового проекта: "невозможно преобразовать "int" в "const golf" C++
C++ Error C2440 невозможно преобразовать "void *" в "char *
C++ Несовместимые типы операндов "char" и "const char*"
C++ Error C2664: RegisterClassW: невозможно преобразовать параметр 1 из "WNDCLASSEX *" в "const WNDCLASSW *"

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

Или воспользуйтесь поиском по форуму:
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.09.2009, 03:37     Невозможно преобразовать "const char" в "char" #7
Цитата Сообщение от Gravity
string вроде можно сравнивать как ==, хотя не помню точно.
там оно другое означает, то есть сама операция == по-другому работает (вроде из-за того, что перегружена)

отрывок с заголовка из include
C++
1
2
3
4
5
6
7
8
9
10
11
12
// operator ==
  /**
   *  @brief  Test equivalence of two strings.
   *  @param lhs  First string.
   *  @param rhs  Second string.
   *  @return  True if @a lhs.compare(@a rhs) == 0.  False otherwise.
   */
  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
               const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __lhs.compare(__rhs) == 0; }
compare()

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
/**
       *  @brief  Compare to a string.
       *  @param str  String to compare against.
       *  @return  Integer < 0, 0, or > 0.
       *
       *  Returns an integer < 0 if this string is ordered before @a str, 0 if
       *  their values are equivalent, or > 0 if this string is ordered after
       *  @a str.  Determines the effective length rlen of the strings to
       *  compare as the smallest of size() and str.size().  The function
       *  then compares the two strings by calling traits::compare(data(),
       *  str.data(),rlen).  If the result of the comparison is nonzero returns
       *  it, otherwise the shorter one is ordered first.
      */
      int
      compare(const basic_string& __str) const
      {
        const size_type __size = this->size();
        const size_type __osize = __str.size();
        const size_type __len = std::min(__size, __osize);
 
       int __r = traits_type::compare(_M_data(), __str.data(), __len);
        if (!__r)
          __r =  __size - __osize;
        return __r;
      }
Yandex
Объявления
07.09.2009, 03:37     Невозможно преобразовать "const char" в "char"
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru