Могу ли я объявить строку в файле заголовка в определении класса?
можно ли объявить строку в заголовке (.H-файл), в определении класса?
когда я хочу установить по умолчанию int
, Я:
class MyClass
{
static const unsigned int kDATA_IMAGE_WIDTH = 1024;
есть ли способ сделать то же самое для
5 ответов
из сообщения об ошибке, которое вы дали (акцент мой):
ошибка: неверный в классе инициализация статического элемента данных неинтегрированного типа 'const std:: string'
вы можете сделать это в заголовочный файл, но вы не можете сделать это в классе.
что есть:
class MyClass
{
static const std::string invalid = "something";
};
недопустимо, но
static const std::string valid = "something else";
действителен.
Если вы хотите, чтобы статика была только членом класса, вы делаете это:
//Header
class MyClass
{
static const std::string valid;
};
//Implementation (.cpp) file
const std::string MyClass::valid = "something else again";
только статический const Интеграл переменные класса могут быть инициализированы с помощью "= постоянный" синтаксис.
да, но строки не являются внутренними для C++. вам нужен правильный #include
#include <string>
static const std::string kDEFAULT_FILE_EXTENSION = "png";
на боковой ноте. Я никогда не видел, чтобы код c++ использовал префикс k для обозначения константы. Я думаю, что это конвенция Objective-C. Кроме того, символы ALL_CAPS должны быть зарезервированы для макросов #define, а не для языковых констант.
Да, вы должны иметь возможность объявлять строки или помещать любой другой код в файл заголовка. Это может быть сбой, потому что в заголовочном файле отсутствует #include, который определяет строку, или вам нужно поместить "std::" перед ним, если вы не "используете пространство имен std" в заголовочном файле.
пожалуйста, обновите свой вопрос с конкретной ошибкой компилятора, которую вы видите, если эти предложения не исправить. Надеюсь, это поможет.
У меня нет контекста здесь, но если цель состоит в том, чтобы определить неизменяемый массив символов, завершенный "\0", почему бы не использовать:
static const char kDEFAULT_FILE_EXTENSION [] = "png";
кроме того, обратите внимание, что нет прозрачного преобразования между классом string и const char * без вызова string::c_str()..
два варианта:
определите функцию в заголовке, которая является статической и возвращает нужную строку.
static std::string kDEFAULT_FILE_EXTENSION()
{
return "png";
}
макрос будет делать правильную вещь здесь
#define STATIC_STRING_IN_HEADER(name,value) static std::string name(){return value;}
STATIC_STRING_IN_HEADER(kDEFAULT_FILE_EXTENSION,"png")