forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   string. Problems? (http://forum.boolean.name/showthread.php?t=17545)

ANIK123 19.11.2012 23:43

string. Problems?
 
Сразу к делу:
есть some.hpp и some.cpp

some.hpp
Код:

#ifndef _SOME_HPP
#define _SOME_HPP

namespace Some{
        extern string text;
        extern void Do();
}

#endif

some.cpp
Код:

#include "some.hpp"

string Some::text = "ололо";
void Some::Do()
{
        buffer = "text1_"; //шаг 1
        buffer += Some::text; //шаг 2
        buffer += "_text2"; //шаг 3
}

buffer это тоже стринг, обьявленный через экстерн
Ожидаемый результат функции Do(): "text1_ололо_text2"
В чем проблема:
шаг 1: все прекрассно
шаг 2: все прекрассно
шаг 3: в buffer-е не произошло никаких изменений!
т е я могу повторять первый шаг сколько угодно, но как только мы пройдем через второй шаг уже больше в буффер ничего не возможно добавить
В итоге получаем "text1_ололо"
Для меня это мистика О_О
А! И еще: если вместо Some::text использовать другой стринг, то все ОК, но это же не выход!
И ЕЩЕ: если второй шаг немножко изменить: buffer += &Some::text[0]; то никаких проблем, но это же не выход!
Это такая наглая особенность стрингов обьявленных через экстерн?

Иииииии....... что это за аномалия такая?

ps: извиняюсь что создал новую тему, затупил

UPD: Обнаружил еще места в которых присваивание тупо не работает без видимых причин

HolyDel 20.11.2012 00:25

Ответ: string. Problems?
 
что такое buffer. где он объявлен?

ANIK123 20.11.2012 00:36

Ответ: string. Problems?
 
com.hpp
Код:

#ifndef _COM_HPP
#define _COM_HPP
extern string buffer;
#endif

com.cpp
Код:

#include "com.hpp"
string buffer = "";

com.hpp инклюдится в some.hpp

upd: и вправду, иесли использовать вместо буффера какой-нить другой новоиспеченный стринг то все ок, но это опять же не выход
И сравнивание не работает
Вообще!

HolyDel 20.11.2012 02:09

Ответ: string. Problems?
 
string - это std::string?

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

jimon 20.11.2012 02:13

Ответ: string. Problems?
 
полный ребилд спасёт

ANIK123 20.11.2012 12:25

Ответ: string. Problems?
 
Может вам целый проект кинуть?

HolyDel 20.11.2012 12:51

Ответ: string. Problems?
 
ну кинь

ANIK123 20.11.2012 22:08

Ответ: string. Problems?
 
Здесь были ссылки, но увы их уже нету

UPD: вся эта канитель с стрингом началась после того, как мне взъёбнуло в бошку подогнать весь код под тотальное использоапние стрингов вместо чаров
после трех-часового труда я радостно обнаружил что задание выполнено, осталось только скомпилить, но не тут то было))) печаль однако(

UPD: Завтыкал! Конкретные фейловые места до которых програмка еще не падает:
присвоение:
level.cpp
Код:

buffer = "maps\\";
buffer += &Level::name[0]; //смените на buffer += Level::name;
buffer += "\\background.jpg";

сравнение строк:
db_u.cpp


Часовой пояс GMT +4, время: 12:45.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot