Компиляция C ++ с использованием mpic ++ error

Я пытаюсь скомпилировать программу с использованием mpic ++ в системе Linux. Программа содержит исходные файлы, предоставленные нашим профессором, и именно эти файлы выдают ошибки. В Visual Studio C ++ нет проблем с компиляцией кода, но мы обязаны запустить его в системе Linux, и когда я перевожу его в систему Linux для компиляции с использованием mpic ++, возникает ошибка.

mpic++ -std=c++11 -Wall -c CommonApprox.cpp
In file included from ApproxIface.h:3:0,
from CommonApprox.h:3,
from CommonApprox.cpp:1:
referencedIface.h:23:19: error: '__stdcall' declared as a 'virtual' field
referencedIface.h:23:19: error: expected ';' at end of member declaration
referencedIface.h:23:90: error: ISO C++ forbids declaration of 'QueryInterface'           with no type [-fpermissive]
referencedIface.h:24:17: error: '__stdcall' declared as a 'virtual' field
referencedIface.h:24:17: error: expected ';' at end of member declaration
referencedIface.h:24:17: error: redeclaration of 'ULONG IReferenced::__stdcall'
referencedIface.h:23:19: note: previous declaration 'HRESULT IReferenced::__stdc          all'

Ошибки продолжаются, это только первые несколько. Код, на который ссылается эта конкретная ошибка, показан ниже.

#define IfaceCalling __stdcall

class IReferenced {
/* Actually, this is IUnknown of the WinAPI's COM
HRESULT and ULONG are used to allow possible and easy interoperability
accross different compilers and languages on Windows
*/

public:
virtual HRESULT IfaceCalling QueryInterface(/*REFIID */ void*  riid,     void ** ppvObj) = 0;
virtual ULONG IfaceCalling AddRef() = 0;
virtual ULONG IfaceCalling Release() = 0;
};

Насколько я знаю, нам не разрешено изменять код, который был нам предоставлен.

Спасибо за помощь.

РЕДАКТИРОВАТЬ:

Я использую make-файл для компиляции программы.

OBJECTS = CommonApprox.o DatabaseHandler.o MaskHandler.o Output.o StatsHandler.o GlucoseLevels.o AkimaInterpolation.o CatmullRomInterpolation.o ApproxIface.o referencedImpl.o main.o

CFLAGS = -std=c++11 -Wall
LIBS = -lsqlite3 -ltbb
CC = mpic++

all: ku_ppr_distr

ku_ppr_distr : $(OBJECTS)
$(CC) $(CFLAGS) $^ $(LIBS) -o $@
rm -f *.o

CommonApprox.o: CommonApprox.cpp CommonApprox.h hresult.h
$(CC) $(CFLAGS) -c CommonApprox.cpp

DatabaseHandler.o: DatabaseHandler.cpp DatabaseHandler.h
$(CC) $(CFLAGS) -c DatabaseHandler.cpp

MaskHandler.o: MaskHandler.cpp MaskHandler.h
$(CC) $(CFLAGS) -c MaskHandler.cpp

Output.o: Output.cpp Output.h
$(CC) $(CFLAGS) -c Output.cpp

StatsHandler.o: StatsHandler.cpp StatsHandler.h
$(CC) $(CFLAGS) -c StatsHandler.cpp

GlucoseLevels.o: GlucoseLevels.cpp GlucoseLevels.h
$(CC) $(CFLAGS) -c GlucoseLevels.cpp

AkimaInterpolation.o: AkimaInterpolation.cpp AkimaInterpolation.h
$(CC) $(CFLAGS) -c AkimaInterpolation.cpp

CatmullRomInterpolation.o: CatmullRomInterpolation.cpp CatmullRomInterpolation.h
$(CC) $(CFLAGS) -c CatmullRomInterpolation.cpp

ApproxIface.o: ApproxIface.cpp ApproxIface.h
$(CC) $(CFLAGS) -c ApproxIface.cpp

referencedImpl.o: referencedImpl.cpp referencedImpl.h
$(CC) $(CFLAGS) -c referencedImpl.cpp

main.o: main.cpp
$(CC) -w $(CFLAGS) -c main.cpp

%.o: %.c
$(CC) -c $<

clean:
rm -f *.o

0

Решение

mpic++ это обертка для g++ (компилятор GNU C ++ в Linux). __stdcall директива компилятора Visual C ++ для управления сгенерированным кодом, который не распознается g++, Вы можете попробовать добавить нулевое определение для __stdcall в ваш make-файл, т.е.

CFLAGS = -D__stdcall= -std=c++11 -Wall

Это должно избавить от нескольких сообщений об ошибках.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]