множественное определение и первое определение здесь C-программирование [дубликат]

Одной из причин этого может быть забывание добавления android.permission.INTERNET разрешений в AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" />

56
задан kaykun 2 September 2010 в 15:12
поделиться

3 ответа

Глобальная переменная должна быть объявлена ​​extern в файле заголовка, включенном обоими исходными файлами, а затем определена только в одном из этих исходных файлов:

common.h

extern int global;

source1.cpp

#include "common.h"

int global;

int function(); 

int main()
{
    global=42;
    function();
    return 0;
}

source2.cpp

#include "common.h"

int function()
{
    if(global==42)
        return 42;
    return 0;
}
84
ответ дан e.James 20 August 2018 в 14:19
поделиться

Вы добавляете «файл заголовка», который описывает интерфейс для модуля source1.cpp:

source1.h

#ifndef SOURCE1_H_
#define SOURCE1_H_

extern int global;

#endif

source2.h

#ifndef SOURCE2_H_
#define SOURCE2_H_

int function();

#endif

и добавьте оператор #include в каждый файл, который использует эту переменную, и (важный), который определяет переменную.

source1.cpp

#include "source1.h"
#include "source2.h"

int global;     

int main()     
{     
    global=42;     
    function();     
    return 0;     
}

source2.cpp

#include "source1.h"
#include "source2.h"

int function()            
{            
    if(global==42)            
        return 42;            
    return 0;            
}

Хотя это необязательно, я предлагаю имя source1.h для файла показать, что он описывает публичный интерфейс к модулю source1.cpp. Точно так же source2.h описывает, что доступно в source2.cpp.

11
ответ дан harper 20 August 2018 в 14:19
поделиться

В одном файле вы объявляете его как в source1.cpp, во втором вы объявляете его как

extern int global;

. Конечно, вы действительно не хотите этого делать и, вероятно, должны публиковать вопрос о том, чего вы пытаетесь достичь, поэтому люди здесь могут дать вам другие способы его достижения.

1
ответ дан Patrick 20 August 2018 в 14:19
поделиться
  • 1
    Вы должны добиться того, чтобы компилятор получал одно и то же заявление extern для каждого блока компиляции, которому требуется объявление. Когда вы распространяете externs по всем файлам, которым необходим внешний доступ к переменной, функции, ... сложно синхронизировать их. Вот почему: не объявляйте extern в потребляющем .cpp-файле. – harper 2 September 2010 в 15:29
Другие вопросы по тегам:

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