Предварительное объявление объекта указателя функции в C++

У меня есть группа объектов-указателей функций в файле заголовка С++, я включаю этот файл в основной файл заголовка, а затем пытаюсь использовать эти объекты в другом файле С++ (инициализировать указатели функций, а затем использовать эти указатели через другую часть кода), но Я всегда получаю ошибку «несколько определенных». Есть ли способ объявить объекты указателя глобальной функции в заголовочном файле?


person shadeglare    schedule 04.08.2011    source источник


Ответы (2)


Вы можете сделать это в своем основном заголовке. (Предполагая, что вы используете typedef под названием FnPointer)

extern FnPointer fn;

Затем в вашем файле реализации

FnPointer fn;

( extern означает, что эта переменная будет существовать, но я собираюсь выделить для нее место позже в какой-нибудь другой единице компиляции.)

person Michael Anderson    schedule 04.08.2011
comment
Кажется, я забыл ключевое слово extern после многих лет кодирования на C# ))). Большое спасибо. - person shadeglare; 04.08.2011

Просто используйте их как любые другие глобальные указатели.

  • Объявите указатели функций как extern в одном из файлов заголовков.
  • Включите заголовок в один из исходных файлов, который определяет переменную &
  • Включите заголовок во все исходные файлы, которые ссылаются на переменную.

Шаг 1:

file.h

extern Func_Pointer ptr1;  /* Declaration of the function pointer */ 

Шаг 2.
file.cpp

 #include "file.h"  /* Declaration is available through header */  

  /* define it here */ 
  Func_Pointer ptr1 = //some address;    

Шаг 3.
someOtherfile.cpp

#include "file.h" 

void doSomething(void) 
{     
    *(ptr1)(); //Use it here
} 
person Alok Save    schedule 04.08.2011