Как мне обойти LNK2005 в этой ситуации? [Дубликат]

Ваш код getElementById() работает, поскольку идентификаторы должны быть уникальными, и поэтому функция всегда возвращает ровно один элемент (или null, если ни один не найден).

Однако getElementsByClassName() , querySelectorAll() и другие методы getElementsBy* возвращают массивный набор элементов. Итерации над ним, как и с реальным массивом:

var elems = document.getElementsByClassName('myElement');
for(var i = 0; i < elems.length; i++) {
    elems[i].style.size = '100px';
}

Если вы предпочитаете что-то более короткое, рассмотрите использование jQuery :

$('.myElement').css('size', '100px');

15
задан Bg1987 17 June 2012 в 15:56
поделиться

5 ответов

Я не буду включать все детали, но вы определяете глобальную переменную wat дважды в вашей компиляции uint.

Чтобы исправить, используйте следующее:

FileB.h

extern int wat;

FileB.cpp

int wat = 0;

Это (extern) сообщает компиляции, что переменная wat существует где-то и что он должен найти его на своем собственном (в этом случае он находится в FileB.cpp)

26
ответ дан Richard J. Ross III 22 August 2018 в 20:07
поделиться
  • 1
    Это влияет на оптимизацию для переменных const? Оптимизация компилятора выполняется на этапе компиляции или стадии ссылки? – ar2015 1 March 2018 в 00:55

Я нашел ответ сейчас (думаю, посмотрел на файлы один за другим помог) Проблема в том, что компилятор создает FileB.o, который имеет определение wat, а затем пытается скомпилировать FilB.o с FileA. cpp, в то время как FileA.h включает в себя файл FileB.h, теперь у него также будет определение wat.

1
ответ дан Bg1987 22 August 2018 в 20:07
поделиться
  • 1
    У меня только один файл blabla.h и с включенными защитами (#ifndef xxx_H ...) и одна глобальная переменная. Во время компиляции я получил множественное определение ошибки «myglobal_variable». – Kemin Zhou 7 May 2017 в 03:05

Не объявляйте переменную в заголовке. #include буквально копирует и вставляет содержимое файла в другой файл (то есть любой файл, который делает #include "FileB.h", буквально копирует содержимое FileB.h в него, что означает, что int wat определяется в каждом файле, который #include "FileB.h").

Если вы хотите получить доступ к wat из FileA.cpp и объявлен в FileB.cpp, вы можете пометить его как extern в FileA.cpp.

6
ответ дан Cornstalks 22 August 2018 в 20:07
поделиться

Это объявление переменной wat является определением, которое должно принадлежать в файле cpp. Это как если бы вы поместили свои тела функций в заголовок.

Вам нужно поставить extern перед объявлением wat и скопировать текущее объявление без extern в один из файлов cpp.

0
ответ дан Johannes Schaub - litb 22 August 2018 в 20:07
поделиться

Вы получаете несколько определений, потому что wat объявляется в области файла и дважды отображается в двух исходных файлах.

Вместо этого сделайте переменную declartion extern и определите ее точно в одном исходном файле.

extern int wat;  // In FileB.h

int wat;   // In FileB.cpp
3
ответ дан Mahesh 22 August 2018 в 20:07
поделиться
Другие вопросы по тегам:

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