So I\'m currently working on a school-project with C++, which I\'m not really familiar with. I would like to create a class, containing all my constants (string,int,double,own c
You should declare your data members in your header file, but the definitions should be placed in the source file, like this for example:
const std::string Reference ::earthPath = "E:\\Development\\C++\\Material\\terrain\\deep_sea.tga";
Read more in: Static Data Member Initialization.
PS: Classes do not use to expose into public scope their data members. Getter and Setter functions are used instead, while the data members are not in public scope. If all you need is your data members, then a namespace could be a better design choice, than a class.
In C++17, the recommended way of defining string constants if by using an inline constexpr std::string_view
. Example:
namespace reference
{
inline constexpr std::string_view deepSeaPath{R"(something)"};
// ...
}
This is great because:
std::string_view
is a lightweight non-owning wrapper that can efficiently refer to string literals without any additional costs.
std::string_view
seamlessly interoperates with std::string
.
Defining the variables as inline
prevents ODR issues.
Defining the variables as constexpr
makes it clear to both the compiler and other developers that these are constants known at compile-time.
If you do not have the luxury of using C++17, here's a C++11 solution: define your constants as constexpr const char*
in a namespace:
namespace reference
{
constexpr const char* deepSeaPath{R"(something)"};
// ...
}