h и cpp
const* char
*SLineTooLong = "Слишком длинная строка",
*SInvalidString = "Неверная строковая константа",
*SIdentifierExpected = "Ожидается идентификатор";
в h файле мне компилятор выдает список ошибок типа:
MyKurs error LNK2005: "char * SCharExpected" (?SCharExpected@@3PADA) already defined in Convert.obj
А если то же самое сделать в срр, все ОК?
Цитата:
Originally posted by lexus
Почему, когда я объявляю
const* char
*SLineTooLong = "Слишком длинная строка",
*SInvalidString = "Неверная строковая константа",
*SIdentifierExpected = "Ожидается идентификатор";
в h файле мне компилятор выдает список ошибок типа:
MyKurs error LNK2005: "char * SCharExpected" (?SCharExpected@@3PADA) already defined in Convert.obj
А если то же самое сделать в срр, все ОК?
Почему, когда я объявляю
const* char
*SLineTooLong = "Слишком длинная строка",
*SInvalidString = "Неверная строковая константа",
*SIdentifierExpected = "Ожидается идентификатор";
в h файле мне компилятор выдает список ошибок типа:
MyKurs error LNK2005: "char * SCharExpected" (?SCharExpected@@3PADA) already defined in Convert.obj
А если то же самое сделать в срр, все ОК?
Ты не обявляеш, а определяеш. А ето разные вещи. Обявлять можно много раз, а определять один. Так как хидер влючается в несколько модулей то получается несколько определений одного и того же.
Оставь все ето в cpp, а в h обяви как extern
Цитата:
Originally posted by Rebbit
Ты не обявляеш, а определяеш. А ето разные вещи. Обявлять можно много раз, а определять один. Так как хидер влючается в несколько модулей то получается несколько определений одного и того же.
Оставь все ето в cpp, а в h обяви как extern
Ты не обявляеш, а определяеш. А ето разные вещи. Обявлять можно много раз, а определять один. Так как хидер влючается в несколько модулей то получается несколько определений одного и того же.
Оставь все ето в cpp, а в h обяви как extern
Но у меня хедер используется только 1 раз, плюс включил директиву #pragma once
Цитата:
Originally posted by lexus
Но у меня хедер используется только 1 раз, плюс включил директиву #pragma once
Но у меня хедер используется только 1 раз, плюс включил директиву #pragma once
пишеш так
static char SLineTooLong[] = "Слишком длинная строка";
и все ОК
Цитата:
Originally posted by Matush
пишеш так
static char SLineTooLong[] = "Слишком длинная строка";
и все ОК
пишеш так
static char SLineTooLong[] = "Слишком длинная строка";
и все ОК
спасибо
Все ок будет для константной строки. Если изменить сроку описаную со статиком, то уже в следующем файле она будет НЕ ИЗМЕНЕННОЙ. В каждый файл .срр будет включена СВОЯ копия строки. Как показали ранее, для extern переменных нуна юзать определение в cpp файле.