Инициализация статического массива строк (C++)?

Я также столкнулся с проблемой с игнорированием более крупных границ, которые я установил, когда печать документа в формате PDF через проявляет. Я был успешен для решения проблемы при помощи ghostview и принтера, установленного непосредственно на моем ПК. (К сожалению, ghostview не работал правильно, когда я попробовал печать на удаленном принтере, подключенном с ПК через сеть.)

14
задан Paul D. 3 September 2009 в 22:16
поделиться

5 ответов

Этот код компилируется:

struct X {
   static const char* enumtext[];
};

const char* X::enumtext[] = { "A", "B", "C" };

Проверьте свой код и найдите отличия. Я могу только думать, что вы не определили статический атрибут в классе,

15
ответ дан 1 December 2019 в 10:19
поделиться

Это компилируется с gcc версии 4.0.1:

#include <iostream>

class MyClass {
public:
    const static char* enumText[];
};

const char* MyClass::enumText[] = { "a", "b", "c" };

int main()
{
    std::cout << MyClass::enumText[0] << std::endl;
}

Скомпилировано с:

g++ -Wall -Wextra -pedantic s.cc -o s

Вы уверены, что MyClass :: enumText ссылается на правильный класс ?

6
ответ дан 1 December 2019 в 10:19
поделиться

Учитывая сообщение об ошибке, мне кажется, что у вас есть объявление MyClass где-нибудь (возможно, в другом заголовке?), В котором не объявлен enumText [].

2
ответ дан 1 December 2019 в 10:19
поделиться

Как говорит компилятор, вы пытаетесь определить статический член MyClass , который будет массивом const char * с именем enumText . Если у вас нет его объявления в классе, тогда возникает проблема.

У вас должно быть:

class MyClass
{
   //blah
   static const char* enumText[];
};

или, может быть, вам не нужен статический член. Если нет, вам не нужно использовать класс в имени.

В любом случае, это не имеет ничего общего с инициализацией массива.

2
ответ дан 1 December 2019 в 10:19
поделиться

Следующий код отлично компилируется для меня в VS 2005:

class MyClass
{
const static char* MyClass::enumText[];
};
const char* MyClass::enumText[] = { "A", "B", "C", "D", "E" };

Если бы мне пришлось сделать безумное предположение, я бы сказал, что ваша строка инициализации находится в отдельном исходном файле, и вы забыли # включить файл .h, содержащий MyClass. Это именно то, что я делаю постоянно.

Кроме того, мне кажется весьма вероятным, что у вас const не в том месте (или их недостаточно). В нынешнем виде это не массив, который является постоянным, или указатели в массиве; только элементы символа внутри него.

1
ответ дан 1 December 2019 в 10:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: