Вот есть одна задачка такого вида, решил обратиться к общественному разуму, так как своего на эту задачку не хватает
Может быть кто-то уже сталкивался и нашёл решение.
К примеру есть у нас две структуры:
struct test_struct
{
unsigned int id;
std::wstring name;
static const std::string info;
};
const std::string test_struct::info = "йцуке";
хотелось бы всё это написать в хедере и не создавать для этой задачи отдельный cpp файл.
Впринципе можно так сделать, но если этот хедер заинклудить из двух разных cpp-файлов, то линкер ругается на двойное объявление.
#pragma once и ifdefы соответственно не помогают. Может быть это как-то можно через шаблоны сделать или какой другой способ,
но додуматься пока не получается. Буду оч. признателен вашей помощи.
хороший совет: вытащи статическую переменную из структуры, тогда сможешь ее определять даже в хедере
плохой совет: внеси всю структуру в анонимный неймспейс, должно скомпилироваться и, возможно, работать
Здравствуйте, xorix, Вы писали:
X>Впринципе можно так сделать, но если этот хедер заинклудить из двух разных cpp-файлов, то линкер ругается на двойное объявление. X>#pragma once и ifdefы соответственно не помогают. Может быть это как-то можно через шаблоны сделать или какой другой способ, X>но додуматься пока не получается. Буду оч. признателен вашей помощи.
Пометь определение переменной как __declspec(selectany). Для gcc там есть __attribute__ аналогичный.
X>Добрый день!
X>Вот есть одна задачка такого вида, решил обратиться к общественному разуму, так как своего на эту задачку не хватает X>Может быть кто-то уже сталкивался и нашёл решение.
X>К примеру есть у нас две структуры:
X>struct test_struct X>{ X> unsigned int id; X> std::wstring name;
X> static const std::string info; X>};
X>const std::string test_struct::info = "йцуке";
Не увидел двух структур, ну да ладно. Щас я вас научу плохому, вы так старайтесь не делать.
Здравствуйте, Andrew S, Вы писали:
X>>Добрый день!
X>>Вот есть одна задачка такого вида, решил обратиться к общественному разуму, так как своего на эту задачку не хватает X>>Может быть кто-то уже сталкивался и нашёл решение.
X>>К примеру есть у нас две структуры:
X>>struct test_struct X>>{ X>> unsigned int id; X>> std::wstring name;
X>> static const std::string info; X>>};
X>>const std::string test_struct::info = "йцуке";
AS>Не увидел двух структур, ну да ладно. Щас я вас научу плохому, вы так старайтесь не делать.
X>Добрый день!
X>Вот есть одна задачка такого вида, решил обратиться к общественному разуму, так как своего на эту задачку не хватает X>Может быть кто-то уже сталкивался и нашёл решение.
X>К примеру есть у нас две структуры:
X>struct test_struct X>{ X> unsigned int id; X> std::wstring name;
X> static const std::string info; X>};
X>const std::string test_struct::info = "йцуке";
X>хотелось бы всё это написать в хедере и не создавать для этой задачи отдельный cpp файл.
Если мы объявляем какую нить константу в *.h файле, то проинициализирована она должна быть в *.cpp файле, таковы требования компиляторов (хотя где то, щас не припомню тока, это проглатывалось, толи под Линуксовый какой то компилятор толи ещё как то).
X>Впринципе можно так сделать, но если этот хедер заинклудить из двух разных cpp-файлов, то линкер ругается на двойное объявление. X>#pragma once и ifdefы соответственно не помогают. Может быть это как-то можно через шаблоны сделать или какой другой способ, X>но додуматься пока не получается. Буду оч. признателен вашей помощи.
В данном случае, если все правельно сделано, #pragma once и ifdefы нимогут ни помочь ибо для этого они и преднозначены — полюбому что то не так делается.
Здравствуйте, Caracrist, Вы писали:
C>Здравствуйте, xorix, Вы писали:
X>>Доброй ночи, чё-то не заработало, после создания структуры info == "" C>http://codepad.org/qHVRenE1
Спасибо большое, с шаблоном всё заработало! В целом немного громоздко получается, но зато работает!
Оставлю на выбор пользователю моей библиотеки пусть сам решает как лучше, cpp отдельный создавать или шаблоном пользоваться