LinuxシステムでmpiC++を使用してプログラムをコンパイルしようとしています。このプログラムには教授が提供するソースファイルが含まれています。これらのファイルはエラーを投げます。 Visual Studio C++ではコードをコンパイルするのに問題はありませんが、Linuxシステムで起動するようになっており、mpiC++を使用してコンパイルするためにLinuxシステムに移動するとエラーが発生します。mpiC++エラーを使用したC++コンパイル
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'
erorrsが続き、これらはほんの最初の数です。この特定のエラーが参照するコードを以下に示します。
#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;
};
私が知る限り、私たちは私たちに提供されたコードを変更することはできません。
ありがとうございました。
編集:
私はプログラムをコンパイルするためにmakefileを使用します。
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 [email protected]
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
おかげで、私は を追加することによって、問題を修正 '_WINDOWS' #ifndefの'の#define __stdcall' '#endif' (申し訳ありませんが、私はコメントで複数行のコードを書く方法を知りません) – finrod
私はあなたに与えられたコードを変更することを許されていないと言いました。それが私があなたがmakefileでやるよう提案した理由です:) – stanthomas