LINUX.ORG.RU

gcc не понимает тип string


0

0

помогите разобраться в файле есть строки

#include <string.h>

main() {

string str; str=""; ...

при попытке компиляции gcc выдает что типа string он не знает можно конечно заменить string на char * но интересен сам факт может кто нить знает как режить проблемму

заранее спасибо


Ответ на: комментарий от DKorolkov

да точно типа string не существует так написано man string

тогда кто нить занет структуры стринг что бы ее определить

шутники однако "не существует" :)

rh9
() автор топика
Ответ на: комментарий от rh9

DKorolkov произнёс эти слова с сорказмом.
//======================================
#include <string.h> 
using namespace std;
main() { 

string str; str=""; ...

||

#include <string.h> 

main() { 

std::string str; str=""; ...

xavier
()
Ответ на: комментарий от phoenix

я не понял последнего сообщения это типа using namespace std;

rh9
() автор топика
Ответ на: комментарий от aton

re

include <string> вообще не понимает все перепробовал ни один пример не работает

бросил string написал char str[255]

rh9
() автор топика
Ответ на: re от rh9

>gcc не понимает тип string

А g++ ?

kosmonavt
()
Ответ на: re от rh9

$ cat str.cpp
#include <string>

using namespace std;
int main() {
    string str = "abc";
    return 1;
}

$ g++ str.cpp


и почему у меня всё работает

Reset ★★★★★
()

может быть имеет смысл спросить на какой языке пишет rh9?

anonymous
()

>gcc не понимает тип string

Зато g++ понимает. gcc - для Си, g++ - для С++

Selecter ★★★★
()
Ответ на: комментарий от Reset

потому что руки не из жопы, как тут у некоторых

aton
()
Ответ на: re от rh9

А ты не gcc а g++ дёргай - тогда сразу волшебным образом string появится.

anonymous
()
Ответ на: комментарий от anonymous

//<main.cpp>
#include <string>
#include <iostream>
//using namespase std;
/*
Если раскоментировать using manespace std
 то не понадобится писать std перед каждым оператором
 из стндартной библиотеки.
*/
int main(int argc, char* argv[])
{
std::string qwe = "qwe\n";
	std::cout<<qwe;
return 0;
}
//------------------------------
#<Makifile>
CXX = g++
TARGET = qwe
objects = main.o
$(TARGET): $(objects)
	$(CXX) -o $(TARGET) $(objects)

main.o: main.cpp
	$(CXX) $(CXXFLAGS) -c main.cpp

.PHONY: clean
clean:
	rm $(TARGET) $(objects)
//=============================
Макфаил и сорс, только попробуй написать что это не работает!

xavier
()
Ответ на: комментарий от xavier

1. Не оператором а именем
2. return 0 в main лишнее
3. Нахрена тебе компилить в объектник, можно сразу в бинарь

а так все верно

aton
()
Ответ на: комментарий от aton

2anton.
<1. Не оператором а именем>
string - оператор определения типа.
cout - потоковый оператор вывода.
<2. return 0 в main лишнее>
Не лишнее, так как :
int main(int argc, char* argv[])
[не указывать return - можно, но не желательно]
<3. Нахрена тебе компилить в объектник, можно сразу в бинарь>
Знаите батенька, у меня впечатление что вы не компитентны в вопросе 
 макфаилов, и не только их.
2rh9 Удачи!
P.S.
Нет полезных слов, сиди, молчи, жуй какашку через тряпочку!

xavier
()
Ответ на: комментарий от xavier

Re:

ГЫ:-)

Если уж быть последовательным - cout никак не оператор, а стандартный поток вывода. Оператор же напр. <<

оператор опред типа - ето что то новое... а какой у него приоритет в таб. операций?:-) Да и string s; это не определение типа а объявление переменной типа string...

using разрешает доступ без доп. спецификации ко всему из пр-ва имен, вне зависмости от того оператор это, или класс, или что то там ище...

Собирать одномудульный тест маке-ом моно, но вообще то не нуно - баловство ИМНО...:-)

PS повежливее, ДА?!

AIv ★★★★★
()
Ответ на: Re: от AIv

Re:

using namespace ... разрешает, описался... моно писать usin std::cout; напр. Тоже работает не только для операторов;-)

AIv ★★★★★
()
Ответ на: комментарий от xavier

> [не указывать return - можно, но не желательно]

смотря в каком языке. в С++ обязательно, в Си - нет, что-то функция вернет, а вот что неизвестно :)

Reset ★★★★★
()
Ответ на: комментарий от xavier

2xavier:

> Не лишнее, так как :
> int main(int argc, char* argv[])
> [не указывать return - можно, но не желательно]

Не надо распространять заблуждения.
Стандарт C++ (в отличие от C) _допускает_ выход из main()
без exit() и return, причем эта ситуация явно описана:

If control reaches the end of main without encountering a return
statement, the effect is that of executing return 0.

Нет тут ничего нежелательного.

Onanim
()
Ответ на: комментарий от Onanim

Я не сказал что нельзя, и не сказал что не_желательно для компилятора - ему пофиг. в int main(int argc, char* argv[]) стоит инт, поэтому <return 0 в main лишнее> мне кажецца безпочвенным. З.Ы.: К этому можно есчо и написание в коде коментариев приплести.

<Если уж быть последовательным - cout никак не оператор, а стандартный поток вывода.> Да накрутил немножко. <Нет полезных слов, сиди, молчи, жуй какашку через тряпочку! + PS повежливее, ДА?!> 2aton Погорячился, 3 дня не сплю. Извени если обидел.

xavier
()
Ответ на: комментарий от xavier

Re:

<3. Нахрена тебе компилить в объектник, можно сразу в бинарь> А как?

g++ test.cpp

По умолчанию создает a.out, если нуно другое имя есть опция -o :-)

AIv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.