2015-08-03 7 views
0

Привет, товарищи программисты.Возврат ссылки на объект в DLL

У меня возникла странная проблема и нет абсолютно никакого понятия о том, что происходит.

Так что я делаю небольшую библиотеку с некоторыми базовыми вещами, такими как математика и класс окон.

Теперь к этой проблеме, в моем классе vec2 я хочу, чтобы возвращать ссылку на объект, но я получаю эту ошибку компиляции «ошибка C2059: синтаксическая ошибка:„__declspec (dllexport)“»

class vec2 { 
public: 
float x, y; 

vec2(float x = 0, float y = 0) : x(x), y(y) { } 

float FW_API length(); 
vec2 FW_API normalize(); 
float FW_API dot(vec2& v); 

vec2& FW_API rotate(float angle); 
vec2& FW_API translate(float x, float y); 
vec2& FW_API translate(vec2& v); 

vec2 FW_API operator+(vec2& v); 
vec2 FW_API operator-(vec2& v); 
vec2 FW_API operator*(vec2& v); 
vec2 FW_API operator/(vec2& v); 
void FW_API operator+=(vec2& v); 
void FW_API operator-=(vec2& v); 
void FW_API operator*=(vec2& v); 
void FW_API operator/=(vec2& v); 

}; 

FW_API определяется как __declspec(dllexport).

Если я удалю амперсанды, они компилируются без проблем, но не с ними.

Так можно ли это сделать при экспорте методов в DLL?

+0

Предъявите [ testcase] (http://stackoverflow.com/help/mcve) –

+2

Обычно вы экспортируете классы, а не отдельные функции класса. Создайте проект DLL, чтобы получить примеры. BTW: Получите хорошую книгу на C++ и прочитайте главу о «const correctness». –

+0

@UlrichEckhardt спасибо Я получил его на работу :) – JeppeSRC

ответ

0

Решение

класс FW_API vec2

Ввод __declspec (dllexport) на весь класс, а не отдельных методов.

1

Ваш вопрос о том, что "&" должен идти на другой стороне declspec:

Вместо:

vec2& FW_API rotate(float angle); 

Оно должно быть:

vec2 FW_API & rotate(float angle);