Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Часть 2. Я начинающий, подскажите как...(Все вопросы начинающих!!!)

51K
05 июля 2009 года
Олориин
1 / / 05.07.2009
День добрый вопрос такой: в ListBox создал 3 столбца
ListBox1->Columns=3;
каким образом записать строку в второй и третий столбцы?
Страницы:
12K
09 августа 2009 года
Ghox
297 / / 26.07.2009
Цитата: breeve
а порядок написания важен? на самом деле я пробовал по разному.
те мне адо написать чтото вроде:
 
Код:
#ifndef
#include<string>
using namespace std;
#define


Во-первых, #define надо помещать сразу после #ifndef.
Во-вторых, не рекомендуется использовать директиву using namespace в заголовочных (.h) файлах, хоть компилятор этого и не запрещает. В заголовочных файлах рекомендуется вместо этого квалифицировать объект, что он относится к такому-то пространству имен. Т.е. вам (в этом файле) лучше везде, где вы пишете string, писать std::string, а using namespace std не использовать.
А в-третьих - насколько я знаю, в заголовочных (.h) файлах не следует помещать тело функции. Если нужно вынести функцию в отдельный файл, то в заголовочном файле надо прописать объявление (прототип) функции, а тело функции вынести в отдельный .cpp файл. Иначе, если вы не объявили функцию как inline, вы можете получить ошибку при компиляции / линковке (не помню точно на каком этапе) - что-то вроде "multiple definition".
Update. Вы написали раньше чем я написал это сообщение. Но хоть у вас (вроде как) всё получилось, то что я написал здесь не перестает быть актуальным. ;)

43K
09 августа 2009 года
breeve
54 / / 05.06.2009
Цитата: Ghox
Во-первых, #define надо помещать сразу после #ifndef.
Во-вторых, не рекомендуется использовать директиву using namespace в заголовочных (.h) файлах, хоть компилятор этого и не запрещает. В заголовочных файлах рекомендуется вместо этого квалифицировать объект, что он относится к такому-то пространству имен. Т.е. вам (в этом файле) лучше везде, где вы пишете string, писать std::string, а using namespace std не использовать.
А в-третьих - насколько я знаю, в заголовочных (.h) файлах не следует помещать тело функции. Если нужно вынести функцию в отдельный файл, то в заголовочном файле надо прописать объявление (прототип) функции, а тело функции вынести в отдельный .cpp файл. Иначе, если вы не объявили функцию как inline, вы можете получить ошибку при компиляции / линковке (не помню точно на каком этапе) - что-то вроде "multiple definition".
Update. Вы написали раньше чем я написал это сообщение. Но хоть у вас (вроде как) всё получилось, то что я написал здесь не перестает быть актуальным. ;)


Буду иметь ввиду!

43K
09 августа 2009 года
breeve
54 / / 05.06.2009
появился еще вопрос. я создал этот хидер и пытаюсь его изменить. изменяю а сохранить не получается. пишет невозмжно сохранить фаил.
43K
09 августа 2009 года
breeve
54 / / 05.06.2009
Цитата: breeve
появился еще вопрос. я создал этот хидер и пытаюсь его изменить. изменяю а сохранить не получается. пишет невозмжно сохранить фаил.


O_O вопрос еще в силе.

12K
09 августа 2009 года
Ghox
297 / / 26.07.2009
Цитата: breeve
появился еще вопрос. я создал этот хидер и пытаюсь его изменить. изменяю а сохранить не получается. пишет невозмжно сохранить фаил.


ИМХО этот вопрос не по C/C++, а по настройкам ОС, или IDE в которой вы программу делаете. ;)
Может файл создался как read-only, или вы пытаетесь сохранить а его держит какой-то другой процесс (возможно зависший в системе)?
Впрочем, такие "проблемы" надо бы самому уметь решать, вы же не первую неделю как сели за компьютер? ;)

43K
10 августа 2009 года
breeve
54 / / 05.06.2009
Цитата: Ghox
ИМХО этот вопрос не по C/C++, а по настройкам ОС, или IDE в которой вы программу делаете. ;)
Может файл создался как read-only, или вы пытаетесь сохранить а его держит какой-то другой процесс (возможно зависший в системе)?
Впрочем, такие "проблемы" надо бы самому уметь решать, вы же не первую неделю как сели за компьютер? ;)



я изменил фаил так как вы сказали после этого пытался сохранить и думал что ошибка было именно из-за кода,а не ос или иде.
вот код:

Код:
#ifndef TO_H_
#define TO_H_
#include<string>
#include<windows.h>
std::string;
inline string to(const string str)
{
  if(str.length() >= 1) {
    char buf[str.length()];
    CharToOem(str.c_str(), buf);
    return string(buf);
  }
  return str;
}
#endif


 
Код:
#include<iostream>
#include "to.h"
using namespace std;

int main()
{
    cout << to("коля");
    return 0;
}
43K
10 августа 2009 года
breeve
54 / / 05.06.2009
ошибка:
 
Код:
2 D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\to\test_to.cpp In file included from D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\to\test_to.cpp
5 D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\to\to.h declaration does not declare anything
6 D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\to\to.h `string' does not name a type
 D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\to\test_to.cpp In function `int main()':
7 D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\to\test_to.cpp `to' undeclared (first use this function)
87
10 августа 2009 года
Kogrom
2.7K / / 02.02.2008
Меня вот эта строка смущает:
Цитата: breeve

 
Код:
std::string;


наверно, правильнее using std::string; в данном случае или что-то такое.

С массивом символов тоже ерунда. Очень вероятно, что MinGW, который в DevCpp такое создание массивов и переварит, но другие компиляторы могут выдать error. Лучше использовать new и delete.

12K
10 августа 2009 года
Ghox
297 / / 26.07.2009
Цитата: breeve
я изменил фаил так как вы сказали после этого пытался сохранить и думал что ошибка было именно из-за кода,а не ос или иде.


Так ошибка где собственно - при сохранении файла или при компиляции? Из ваших последних двух сообщений перед моим складывается впечатление что у вас просто файл сохранить не получается.
А насчет кода - вы неправильно поняли что я сказал:

Цитата: Ghox
Т.е. вам (в этом файле) лучше везде, где вы пишете string, писать std::string, а using namespace std не использовать.


Похоже вы подумали что достаточно изменить using namespace std на std::string и всё на этом. Применительно к вашему коду, то что я на самом деле имел в виду (может быть, неточно выразился), выглядит так:

Код:
#ifndef TO_H_
#define TO_H_
#include<string>
#include<windows.h>
// std::string; удалить - это не нужно
inline std::string to(const std::string str)
{
  if(str.length() >= 1) {
    char buf[str.length()];
    CharToOem(str.c_str(), buf);
    return std::string(buf);
  }
  return str;
}
#endif

Кстати, вы про пространства имен читали хоть что-нибудь? Если нет то советую почитать. :)
43K
10 августа 2009 года
breeve
54 / / 05.06.2009
Цитата:
Кстати, вы про пространства имен читали хоть что-нибудь? Если нет то советую почитать. :)


этим сейчас и занимаюсь.

Код:
#ifndef TO_H_
#define TO_H_
#include<string>
#include<windows.h>
// std::string; удалить - это не нужно
inline std::string to(const std::string str)
{
  if(str.length() >= 1) {
    char buf[str.length()];
    CharToOem(str.c_str(), buf);
    return std::string(buf);
  }
  return str;
}
#endif


сделал выводит ошибку:
Цитата:
2 D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\to\test_to.cpp In file included from D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\to\test_to.cpp
D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\to\to.h In function `std::string to(std::string)':
10 D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\to\to.h `string' undeclared (first use this function)

12K
10 августа 2009 года
Ghox
297 / / 26.07.2009
Цитата: breeve
сделал выводит ошибку:
Цитата:

2 D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\to\test_to.cpp In file included from D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\to\test_to.cpp
D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\to\to.h In function `std::string to(std::string)':
10 D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\to\to.h `string' undeclared (first use this function)


10-ю строчку в файле to.h не забыли исправить - там где было return string(buf), надо заменить на return std::string(buf)?
Update. Если все исправили и все равно не работает, то, скорее всего, эта ошибка означает, что для string просто нет подходящего конструктора чтобы создать новый string из char-овского массива buf.

14
10 августа 2009 года
Phodopus
3.3K / / 19.06.2008
Цитата: Ghox

А в-третьих - насколько я знаю, в заголовочных (.h) файлах не следует помещать тело функции. Если нужно вынести функцию в отдельный файл, то в заголовочном файле надо прописать объявление (прототип) функции, а тело функции вынести в отдельный .cpp файл. Иначе, если вы не объявили функцию как inline, вы можете получить ошибку при компиляции / линковке (не помню точно на каком этапе) - что-то вроде "multiple definition".


Хмм.. Хотелось бы чтобы народ прокомментировал сей спорный (для меня) момент. Насколько я знаю, хоть ты инклюдь h-файл, хоть .cpp хоть .doc - препроцессор подставит его и ему по-барабану на расширение. Можно кусок класса в h объявить а продолжение в cpp и должно работать.
Кто что скажет?

43K
10 августа 2009 года
breeve
54 / / 05.06.2009
Цитата: Ghox
10-ю строчку в файле to.h не забыли исправить - там где было return string(buf), надо заменить на return std::string(buf)?
Update. Если все исправили и все равно не работает, то скорее всего эта ошибка значит что для string просто нет подходящего конструктора чтобы создать новый string из buf.


:D забыл. все работает. я понял, надо усиленней читать эту тему. :)
благодарствую!

43K
10 августа 2009 года
breeve
54 / / 05.06.2009
Цитата: Phodopus
Хмм.. Хотелось бы чтобы народ прокомментировал сей спорный (для меня) момент. Насколько я знаю, хоть ты инклюдь h-файл, хоть .cpp хоть .doc - препроцессор подставит его и ему по-барабану на расширение. Можно кусок класса в h объявить а продолжение в cpp и должно работать.
Кто что скажет?



я изначально создал фаил .cpp с объявлениями и он у меня его не подставил. сохранил в .h и все заработало. я думаю он не зверь чтобы все подряд подставлять. :D
насчет половину там, половину сям думаю не прокатит.

353
10 августа 2009 года
Nixus
840 / / 04.01.2007
Цитата: breeve
я изначально создал фаил .cpp с объявлениями и он у меня его не подставил. сохранил в .h и все заработало. я думаю он не зверь чтобы все подряд подставлять. :D


Он был бы зверем в обратном случае. У вас кривые руки, а компилятору все равно какой файл вставлять в текущий с помощью #include.

43K
11 августа 2009 года
breeve
54 / / 05.06.2009
Цитата: Nixus
Он был бы зверем в обратном случае. У вас кривые руки, а компилятору все равно какой файл вставлять в текущий с помощью #include.


:eek: честно говоря не знал что можно вставить любой фаил, хоть док.

12K
11 августа 2009 года
Ghox
297 / / 26.07.2009
Цитата: Phodopus
Хмм.. Хотелось бы чтобы народ прокомментировал сей спорный (для меня) момент. Насколько я знаю, хоть ты инклюдь h-файл, хоть .cpp хоть .doc - препроцессор подставит его и ему по-барабану на расширение.


Да, можно инклюдить файлы с любым расширением, если есть такое желание. Но устоявшейся практикой является использование для хедеров (то есть для тех файлов, которые будут инклюдиться в .cpp файлах) расширения.h (или .hpp если хедер содержит шаблонные функции или классы). Вроде бы это правило хорошего тона при составлении проектов...
А если хедер объявить как файл .cpp, и включить его в проект, то он будет компилиться как любой другой .cpp файл - отдельно от других файлов. В чём нет ничего хорошего, т.к. по своему назначению хедер (вернее его код) должен компилиться только в составе других файлов. ИМХО не исключено возникновение какой-нибудь ошибки при компиляции (может кстати потому у breeve и не получилось когда он хедер пытался с расширением .cpp использовать).

Цитата: Phodopus
Можно кусок класса в h объявить а продолжение в cpp и должно работать.
Кто что скажет?


Если говорить про классы (изначально разговор про функции был): можно, если тот кусок класса, который помещен в .h, содержит определение всех переменных класса, объявления и определения всех inline-функций класса, и объявления (но не определения!) всех не-inline-функций, а файл .cpp - определения не-inline функций класса. Ну и при условии что вы файл .cpp не пытаетесь инклюдить в другой .cpp файл.

Цитата: breeve
:eek: честно говоря не знал что можно вставить любой фаил, хоть док.


Да, можно, но ИМХО лучше этой возможностью не пытаться пользоваться (разве что по необходимости - хотя мне в голову не приходит, для чего может понадобиться инклюдить, например, файл .doc). Во избежание путаницы и проблем лучше следуйте устоявшейся практике, и файлы-хедеры создавайте с расширением .h (или .hpp если в хедере шаблоны используете).

51K
12 августа 2009 года
Luzerka
7 / / 12.08.2009
Доброго времени. Начал изучать С++. Вижуал С++)
следующая беда:
во-первых, в книге все указатели задаются *, но опытным путем я понял, что так бывает не всегда, т.к сам компилятор вынуждал меня поменять некоторые звездочки на крышечки ^.
Так например, String ^s, а не String *s;
и char *sc;
Дак вот никак в инете найти не смог, а в книге вообще ничего нет про это, в чем разница между * и ^ ?:)
297
13 августа 2009 года
koodeer
1.2K / / 02.05.2009
2 Luzerka:

"Крышечки" ^ используются в так называемом "управляемом" - managed C++, он же C++.NET. Хотя в нём можно использовать и звёздочки *.
^ - это указатель на объект в управляемой куче - Handle to Object on Managed Heap.

Раз компилятор вынуждал применять ^, значит был создан проект CLR, под платформу Framework .NET.
Если нужен проект не под .NET, то следует при создании нового проекта выбирать MFC или Win32.

Определитесь, какой именно язык будете осваивать: C++ или C++.NET и используйте соответствующие книги.

PS: под .NET гораздо проще использовать C#.
PPS: или Nemerle
51K
13 августа 2009 года
Luzerka
7 / / 12.08.2009
Вот еще непонятки. чтобы подключить сборку мусора для своего класса в книге пишут:
__gc class Atas
{

};

Но это работало в 2003 студии, в 2005 уже по другому. Компилятор выдает ошибку об устаревшем синтаксисе. Как подключить старый синтаксис я нашел, но как это записать в новом синтаксисе - нет.
Как?)
И кстати, в 2008 студии уже нельзя использовать ^ и * как одно и то же.
297
13 августа 2009 года
koodeer
1.2K / / 02.05.2009
Цитата: Luzerka
Вот еще непонятки. чтобы подключить сборку мусора для своего класса в книге пишут:
__gc class Atas
{

};

Но это работало в 2003 студии, в 2005 уже по другому. Компилятор выдает ошибку об устаревшем синтаксисе. Как подключить старый синтаксис я нашел, но как это записать в новом синтаксисе - нет.
Как?)
И кстати, в 2008 студии уже нельзя использовать ^ и * как одно и то же.


Чтобы создать управляемый класс (со сборкой мусора) его нужно объявить

 
Код:
ref class Atas { };

Тогда экземпляр класса создаётся
 
Код:
Atas ^a = gcnew Atas();

Можно создать неуправляемый класс (без сборки мусора)
 
Код:
class Bad { };

Экземпляр такого класса создаётся так
 
Код:
Bad *b = new Bad();

PS: Естественно, лучше использовать управляемые классы, со сборкой мусора.
43K
13 августа 2009 года
breeve
54 / / 05.06.2009
начал читать про классы(пратта).
вроде сделал по аналогии свои класс в разных файлах. и появляться ошибка линкера.
Цитата:
[Linker error] undefined reference to `Info::Info()'
[Linker error] undefined reference to `Info::show()'



Погуглил что-то не нашел. вот код.

main.cpp:

Код:
#include<iostream>
#include "info.h"
using namespace std;

int main()
{
    Info citatnik;
    Info protocol("Protocol", "For get info you must download the book.");
    citatnik.show();
    protocol.show();
    cin.get();
    return 0;
}

info.h
Код:
#ifndef _INFO_H_
#define _INFO_H_
#include<cstring>
using namespace std;
class Info
{
      private:
              string name, info;
      public:
             Info();
             Info(string name, string info);
             ~Info();
             void show();
};
#endif

info.cpp:
Код:
#include<iostream>
#include<cstring>
#include "info.h"
using namespace std;
Info::Info()
{
            cout << "Default constructor is making a object\n";
            name = "Default";
            info = "Info is empty";
}
Info::Info(string name, string info)
{
                  cout << "Constructor is making a object\n";
                  name = "There must be a name";
                  info = "There must be a info about a company";
}
Info::`Info();
void Info::show()
{
     cout << name<<endl;
     cout << info<<endl;
}

подскажите.
9
13 августа 2009 года
Lerkin
3.0K / / 25.03.2003
Цитата: breeve

подскажите.


Как компилируете? Если командная строка, то info.cpp надо явно указывать при компиляции.

43K
13 августа 2009 года
breeve
54 / / 05.06.2009
Цитата: Lerkin
Как компилируете? Если командная строка, то info.cpp надо явно указывать при компиляции.



компилятор dev-cpp.

12K
14 августа 2009 года
Ghox
297 / / 26.07.2009
Цитата: breeve
начал читать про классы(пратта).
вроде сделал по аналогии свои класс в разных файлах. и появляться ошибка линкера.
Цитата:
[Linker error] undefined reference to `Info::Info()'
[Linker error] undefined reference to `Info::show()'



А перед тем, как выдаются эти ошибки линкера, у вас случаем не выдаются ошибки при компиляции? Это я к тому, что вы снова делаете ошибку, о которой я вам уже говорил - инклюдите cstring, а использовать пытаетесь объекты класса string, который из библиотеки string из C++.

43K
14 августа 2009 года
breeve
54 / / 05.06.2009
Цитата: Ghox
А перед тем, как выдаются эти ошибки линкера, у вас случаем не выдаются ошибки при компиляции? Это я к тому, что вы снова делаете ошибку, о которой я вам уже говорил - инклюдите cstring, а использовать пытаетесь объекты класса string, который из библиотеки string из C++.


а помоему cstring и string это одно и тоже. я причем пробовал несколько раз в других прогах и все работало четко и с этой и с той.
я включил цпп фаил в хидер. и у меня появилось много много ошибок. потом поменял директиву стринг на цстринг и ошибок не стало не больше не меньше. вот ошибки:

Цитата:
2 D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\info.h:4, from D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\main.cpp In file included from D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\/info.h:4, from D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\main.cpp
2 D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\main.cpp from D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\main.cpp
5 D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\info.cpp `Info' has not been declared
6 D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\info.cpp ISO C++ forbids declaration of `Info' with no type
D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\info.cpp In function `int Info()':
8 D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\info.cpp `name' undeclared (first use this function) (Each undeclared identifier is reported only once for each function it appears in.)
9 D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\info.cpp `info' undeclared (first use this function) 9 D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\info.cpp At global scope:
11 D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\info.cpp `Info' is not a class or namespace 12 D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\info.cpp ISO C++ forbids declaration of `Info' with no type
17 D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\info.cpp stray '`' in program
17 D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\info.cpp `Info' is not a class or namespace 17 D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\info.cpp expected constructor, destructor, or type conversion before ';' token
18 D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\info.cpp `Info' is not a class or namespace D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\info.cpp In function `void show()':
20 D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\info.cpp `name' undeclared (first use this function) 21 D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\info.cpp `info' undeclared (first use this function) D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\main.cpp In function `int main()':
7 D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\main.cpp expected `;' before "citatnik"
7 D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\main.cpp statement cannot resolve address of overloaded function
8 D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\main.cpp expected `;' before "protocol"
8 D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\main.cpp statement cannot resolve address of overloaded function
9 D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\main.cpp `citatnik' undeclared (first use this function)
10 D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\main.cpp `protocol' undeclared (first use this function)



еще я пробовал писать все в одном файле и ошибки те же самые.

12K
14 августа 2009 года
Ghox
297 / / 26.07.2009
Цитата: breeve
а помоему cstring и string это одно и тоже. я причем пробовал несколько раз в других прогах и все работало четко и с этой и с той.


Уточните пожалуйста, как инклюдите string, по какому из вариантов:
1. #include <cstring>
2. #include <string.h>
3. #include <string>
?
Если я не ошибаюсь, первые 2 варианта - это включение string из C, третий - string из C++.

43K
14 августа 2009 года
breeve
54 / / 05.06.2009
Цитата: Ghox
Уточните пожалуйста, как инклюдите string, по какому из вариантов:
1. #include <cstring>
2. #include <string.h>
3. #include <string>
?
Если я не ошибаюсь, первые 2 варианта - это включение string из C, третий - string из C++.



я пробовал всеми тремя и что-то ошибок других не вылезало.

87
14 августа 2009 года
Kogrom
2.7K / / 02.02.2008
Цитата: breeve

info.cpp:
 
Код:
Info::`Info();


Это что за черточка? А где тело деструктора?

43K
14 августа 2009 года
breeve
54 / / 05.06.2009
Цитата: Kogrom
Это что за черточка? А где тело деструктора?



я это заметил потом исправил.

 
Код:
~Info() {};
12K
14 августа 2009 года
Ghox
297 / / 26.07.2009
Цитата: breeve
я пробовал всеми тремя и что-то ошибок других не вылезало.


Странно, странно... Возможно что у вас string как-то по-другому подключается вашим IDE, независимо от того пишете ли вы string или cstring (и пишете ли вообще). И проблема не из-за string на самом деле...
Есть подозрение что у вас содержимое хедера просто пропускается, и не включается в файлы.
Для начала исправьте ошибку о которой сказал Kogrom.
Если все равно не скомпилится - то предлагаю провести такой эксперимент: закомментарить в info.h строчку #ifndef _INFO_H_ (и #endif в конце). Если после этого чудесным образом закомпилится, то значит надо смотреть настройки проекта - не объявлено ли у вас в defines _INFO_H_.

43K
14 августа 2009 года
breeve
54 / / 05.06.2009
пробую. он начал компилиться. окошко состояние просто висит и ничего не делается могу нажать отмену. вообщем не хочет. он у меня повис я снял задачу. гыы
12K
14 августа 2009 года
Ghox
297 / / 26.07.2009
Цитата: breeve
пробую. он начал компилиться. окошко состояние просто висит и ничего не делается могу нажать отмену. вообщем не хочет. он у меня повис я снял задачу. гыы


Вы закомментировали и #ifndef в начале и #endif в конце?
Можно еще и #define _INFO_H_ попробовать закомментировать.
А вообще - все-таки попробуйте покопаться в настройках проекта, может и в самом деле в defines у вас прописано _INFO_H_. Я вот попробовал у себя (создал проект с вашими тремя файлами) - если прописать в defines _INFO_H_, то начинают вылезать те же ошибки что и у вас. Если не прописывать (и исправить ошибку с деструктором) - то все компилится и работает.

43K
15 августа 2009 года
breeve
54 / / 05.06.2009
Цитата: Ghox
Вы закомментировали и #ifndef в начале и #endif в конце?
Можно еще и #define _INFO_H_ попробовать закомментировать.
А вообще - все-таки попробуйте покопаться в настройках проекта, может и в самом деле в defines у вас прописано _INFO_H_. Я вот попробовал у себя (создал проект с вашими тремя файлами) - если прописать в defines _INFO_H_, то начинают вылезать те же ошибки что и у вас. Если не прописывать (и исправить ошибку с деструктором) - то все компилится и работает.



Я попробовал закомментить ifndef; ifndef и endif; ifndef, endif и define и у меня пишет все время 2 одинаковые ошибки и пишет их не переставая.

Цитата:
4 D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\info.cpp:3, from D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\info.h In file included from D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\/info.cpp:3, from D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\/info.h
3 D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\info.h:4, from D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\info.cpp from D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\/info.h:4, from D:\Dev-Cpp\&#239;&#240;&#238;&#227;&#232;\mFC\/info.cpp


вот эти две ошибки он мне написал раз сто. :D

9
15 августа 2009 года
Lerkin
3.0K / / 25.03.2003
Директивы для заголовков (*.h) представляются в виде:
 
Код:
#ifndef __thisfile_h_included__
#define __thisfile_h_included__

// здесь инклуды, декларации и прочее

#endif  // __thisfile_h_included__


Комментировать директивы от балды - есть большой грех. Приводит к ФГМ и общей слабости организма. Господин Ghox, очевидно практикует неправославное рукоблудие, иначе не стал бы советовать "попробовать закомментировать" все, что можно...

P.S. Столько мучений, от нежелания потратить 20 минут на изучение работы стандартных директив используемого компилятора.
43K
15 августа 2009 года
breeve
54 / / 05.06.2009
я разобрался с этой проблемой. я еще пробовал точно такой же код всунуть в визуал студию. тоже выводил ошибки. мне достаточно было просто инклюдить в мэйн не только хидер но и исходник с функциями, а в хидере убрать исходник. и все заработало. Всем спасибо за участие. :D
Цитата:
//////info.h//////
#ifndef _INFO_H_
#define _INFO_H_
#include<string>

using namespace std;

class Info
{
private:
string name, info;

public:
Info();
Info(string name, string info);
~Info() {};
void show();
};
#endif



Цитата:
//////info.cpp//////
#include<iostream>
#include<string>
#include "info.h"
using namespace std;
Info::Info()
{
cout << "Default constructor is making a object\n";
name = "Default";
info = "Info is empty";
}

Info::Info(string name, string info)
{
cout << "Constructor is making a object\n";
name = "There must be a name";
info = "There must be a info about a company";
}

void Info::show()
{
cout << name<<endl;
cout << info<<endl;
}



Цитата:
//////main.cpp//////
#include<iostream>
#include "info.h"
#include "info.cpp"
using namespace std;

int main()
{
Info citatnik;
citatnik.show();
cin.get();
return 0;
}

9
15 августа 2009 года
Lerkin
3.0K / / 25.03.2003
Цитата: breeve
мне достаточно было просто инклюдить в мэйн не только хидер но и исходник с функциями, а в хидере убрать исходник. :D


Без комментариев.

12K
15 августа 2009 года
Ghox
297 / / 26.07.2009
Цитата: Lerkin
Комментировать директивы от балды - есть большой грех. Приводит к ФГМ и общей слабости организма. Господин Ghox, очевидно практикует неправославное рукоблудие, иначе не стал бы советовать "попробовать закомментировать" все, что можно...


Ув. Lerkin суров, но в общем-то справедлив, учту на будущее его замечание.
Признаю, что мое предложение такого эксперимента (с целью выяснить причины проблемы) является, в общем-то, глупостью и писать такое мне не стоило, а breeve надо было решать проблему, по-хорошему разобравшись с настройками и с основами составления проектов C++ (и вообще C++). Так что мои извинения Lerkin'у и breeve (и всем остальным кто читает этот раздел) за то, что вызвал праведный гнев (это к Lerkin-у) своим предложением глупого эксперимента, и за ложную наводку (это к breeve).
offtop. А почему господин? Господ здесь на форуме вроде нет, господа все в Париже. :rolleyes:

Цитата: Lerkin
P.S. Столько мучений, от нежелания потратить 20 минут на изучение работы стандартных директив используемого компилятора.


+1

Цитата: breeve
мне достаточно было просто инклюдить в мэйн не только хидер но и исходник с функциями


Хоть я себя и дискредитировал, но выскажу свое мнение: я бы ТАК делать не советовал. :)

51K
15 августа 2009 года
Luzerka
7 / / 12.08.2009
добрый день. а скажите в чем разница, сам хоть и прочитал эту разницу, но не врубился в смысл оной)
объявление структур typedef struct { } st; и struct st{};
последний вариант позволяет создавать ссылки на себя самих(для рекурсии) а вот какое принципиальное отличие в спецификаторе typedef кроме как расположения его после фигурак - не врубаюсь хоть убейте)
51K
15 августа 2009 года
Luzerka
7 / / 12.08.2009
Кажется понял. разница в том, что в первом случаи объект как бы статический. если не прав поправте)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог