2016-03-30 5 views
0

Я работаю над сторонней оболочкой модуля. Я надеюсь, что в моем основном заголовочном файле нет сторонних связанных файлов заголовков. Каждый тип параметра и тип возврата непрозрачны, только объявляя его. Но есть анонимная структура, определенная следующим образом:Как объявить непрозрачную анонимную структуру, определенную сторонней?

typedef struct { 
    int x; 
    int y; 
    int width; 
    int height; 
} IppiPoint; 

Я не могу изменить сторонний заголовочный файл. Я понятия не имею, чтобы объявить об этом. Вот что я пытался и сообщения об ошибках, я получил

1.

struct IppiPoint; 
error C2371: 'IppiPoint' : redefinition; different basic types 

2.

typedef struct IppiPoint; 
... warning C4091: 'typedef ' : ignored on left of 'IppiPoint' when no variable is declared 
... error C2371: 'IppiPoint' : redefinition; different basic types 

Как декларировать такую ​​анонимную-структуру?

+0

Почему вы хотите объявить о структуре? Вы явно не должны этого делать, используйте только псевдоним типа, уже предоставленный вашим заголовочным файлом третьей части. –

+0

Я хочу переместить псевдоним типа в файл cpp, тогда мой клиент не увидит заголовок третьей стороны, когда они будут использовать. –

+0

Как насчет 'IppiPoint'? – Fynn

ответ

1

Создайте свой собственный struct Bob;. Используйте его вместо этого.

В CPP, определяют struct Bob следующим образом:

struct Bob { 
    IppiPoint contents; 
}; 

и так долго, как IppiPoint является стандартной компоновки, вы можете reinterpret_cast<IppiPoint*>(pointer_to_bob) легально.

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

Возможно, выберете лучшее имя, чем Bob.

+0

Не будет ли 'reinterpret_cast' нарушать правило строгого сглаживания? – TartanLlama

+1

@TartanLlama Make 'struct Bob {Содержимое IppiPoint; } ', тогда гарантированно будет выполняться реинтерпрет. – Yakk

 Смежные вопросы

  • Нет связанных вопросов^_^