Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Ошибка: нет декларации «testSring» в этой области видимости  (Прочитано 5649 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн aviacliff

  • Автор темы
  • Участник
  • *
  • Сообщений: 100
    • Просмотр профиля
Всем доброго времени суток и всем доброго здоровья.

Пример из Руководства по программированию (на языке Си) для начинающего чайника.
Ссылка: http://kurspk2009.narod.ru/progr/si/sichain.htm

Задача 19_1.с: Написать функцию инвертирования порядка символов.

/*Инвертирование порядка символов */
#include <stdio.h>
#include <string.h>
#include <iostream>

using namespace std;


void swap(char *s1,char *s2){

char c;

c=*s1;*s1=*s2;*s2=c;

}

void reverse(char s[],int n){
int first,last;

first=0;
last=n-1;

while(first<last){

swap(&s[first],&s[last]);
first++;
last--;
  }
}

char testString[]="abcddefghijklmnopqrstuvwxyz";

int main(){

int len;
int strlen(string);


len=strlen(testSring);
reverse(testString,len);
printf("Инвертированная строка:%s\n",testString);

}




после gcc 8.cpp выдает следующее

8.cpp: В функции «int main()»:
8.cpp:41:12: ошибка: нет декларации «testSring» в этой области видимости



Подскажите люди добрые «где зарыта собака».

За ранее спасибо.
Напоминаю, "UBUNTU" переводится как "ЧЕЛОВЕЧНОСТЬ"

Оффлайн aSmile

  • Активист
  • *
  • Сообщений: 755
    • Просмотр профиля
Опечатка:

Цитировать
len=strlen(testString);


P.S. Использование namespace std и <iostream> говорит о том, что вы используете C++, а не C
« Последнее редактирование: 21 Сентября 2013, 23:01:26 от aSmile »

Оффлайн quiet_readonly

  • Участник
  • *
  • Сообщений: 133
    • Просмотр профиля
Кстати, стоит вместо GCC использовать clang: он полностью совместим с GCC, но лучше сообщает об ошибках - такую опечатку он бы нашёл.

Оффлайн aviacliff

  • Автор темы
  • Участник
  • *
  • Сообщений: 100
    • Просмотр профиля
aSmile, quite_readonly спасибо за участие!
Однако.

1.После исправления len=strlen(testSring); на len=strlen(testString);
результат выдал кучу мусора.

2. Убрал #include <iostream> получил:

8.cpp: В функции «int main()»:
8.cpp:36:12: ошибка: нет декларации «string» в этой области видимости
8.cpp:41:22: ошибка: «strlen» нельзя использовать как функцию

3. После добавления в int main()  int string;

int main(){

int len;
int string;

получаю:

8.cpp: В функции «int main()»:
8.cpp:44:22: ошибка: «strlen» нельзя использовать как функцию

в строчке len=strlen(testSring); присутствует какая-то корявость
видимо что-то здесь не так.



Пользователь решил продолжить мысль 22 Сентября 2013, 09:08:41:
Установил clang.
Последний выдал

$ clang 8.cpp
8.cpp:5:17: warning: using directive refers to implicitly-defined namespace 'std'
using namespace std;
                ^
8.cpp:40:12: error: called object type 'int' is not a function or function pointer
len=strlen (testString);
    ~~~~~~ ^
1 warning and 1 error generated.


Пользователь решил продолжить мысль 22 Сентября 2013, 09:45:38:
Убрал
using namespace std;

выдает одну ошибку
error: called object type 'int' is not a function or function pointer
len=strlen(testString);(Ошибка: тип объекта называемого "INT" не является функцией или указателем на функцию
LEN = StrLen (TestString)
« Последнее редактирование: 22 Сентября 2013, 09:45:38 от aviacliff »
Напоминаю, "UBUNTU" переводится как "ЧЕЛОВЕЧНОСТЬ"

Оффлайн aSmile

  • Активист
  • *
  • Сообщений: 755
    • Просмотр профиля
Объясни, что делает эта строчка после объявления len?
Код: (c++) [Выделить]
int strlen(string);

Оффлайн aviacliff

  • Автор темы
  • Участник
  • *
  • Сообщений: 100
    • Просмотр профиля
После ликвидации указанной строки int strlen(string); все получилось.
Это я уже не знал что делать и с какого-то сайта скопировал по образцу

$ ./a.out
Инвертированная строка:zyxwvutsrqponmlkjihgfeddcba

Еще раз огромное спасибо!!!


Пользователь решил продолжить мысль 22 Сентября 2013, 18:37:27:
Окончательный код:

/*Инвертирование порядка символов */
#include <stdio.h>
#include <string.h>




void swap(char *s1,char *s2){

char c;

c=*s1;*s1=*s2;*s2=c;

}

void reverse(char s[],int n){
int first,last;

first=0;
last=n-1;

while(first<last){

swap(&s[first],&s[last]);
first++;
last--;
  }
}

char testString[]="abcddefghijklmnopqrstuvwxyz";

int main(){

int len;
int string;

/*int strlen(string);*/


len=strlen (testString);
reverse(testString,len);
printf("Инвертированная строка:%s\n",testString);



}
« Последнее редактирование: 22 Сентября 2013, 18:37:27 от aviacliff »
Напоминаю, "UBUNTU" переводится как "ЧЕЛОВЕЧНОСТЬ"

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7215
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
aviacliff, лучше компилить программы на плюсах сразу g++, а не gcc.

Оффлайн quiet_readonly

  • Участник
  • *
  • Сообщений: 133
    • Просмотр профиля
aviacliff, лучше компилить программы на плюсах сразу g++, а не gcc.
Или clang++ вместо clang.

Оффлайн aviacliff

  • Автор темы
  • Участник
  • *
  • Сообщений: 100
    • Просмотр профиля
Пакет g++ входит в состав gcc. Если g++ будет отсутствовать, сразу посыпятся ошибки.
Если мне память не изменяет g++ устанавливается при установке build essential.
« Последнее редактирование: 28 Сентября 2013, 08:53:37 от aviacliff »
Напоминаю, "UBUNTU" переводится как "ЧЕЛОВЕЧНОСТЬ"

Оффлайн aSmile

  • Активист
  • *
  • Сообщений: 755
    • Просмотр профиля
Теперь это C-шный код, надо gcc компилировать. А вот с iostream'ом да, надо было g++ использовать, иначе линковка бы не прошла.

 

Страница сгенерирована за 0.11 секунд. Запросов: 22.