2017-06-05 3 views
0

Ich versuche, unter MinGW-64 lljvm, einem nicht so großen Programm, zu kompilieren. Aber ich stecke auf einen Fehler, der mich verrückt macht.Kompilierungsfehler: ungültige Konvertierung beim Aufruf des Basistypkonstruktors

Der Code ist wie folgt:

backend.h

class JVMWritter { 
... 
static char id; 
... 
}; 

backend.cpp

char JVMWriter::id = 0; 

JVMWriter::JVMWriter(): FunctionPass(&id) {} 

Nun FunctionPass in Pass.h wie folgt erklärt:

Pass.h

class FunctionPass { 
... 
explicit FunctionPass (char &pid) : <initialization here> {} 
... 
}; 

Wenn ich versuche, das zu kompilieren, halte ich die folgende Fehlermeldung erhalten:

backend.cpp:39:16: error: invalid conversion from 'char*' to 'char' [-fpermissive] 
    FunctionPass(&JVMWriter::id), targetData(td), out(o), classname(cls), debug(dbg) { 
       ^~~~~~~~~~ 

In file included from D:/dev/msys64/mingw64/include/llvm/IR/DataLayout.h:27:0, 
       from D:/dev/msys64/mingw64/include/llvm/IR/Module.h:20, 
       from D:/dev/msys64/mingw64/include/llvm/IR/PassManager.h:46, 
       from D:/dev/msys64/mingw64/include/llvm/Analysis/LoopInfo.h:47, 
       from backend.h:29, 
       from backend.cpp:23: 
D:/dev/msys64/mingw64/include/llvm/Pass.h:300:12: note: initializing argument 1 of 'llvm::FunctionPass::FunctionPass(char&)' 
    explicit FunctionPass(char &pid) : Pass(PT_Function, pid) {} 
      ^~~~~~~~~~~~ 

backend.cpp:39:16: error: cannot bind rvalue '(char)(& JVMWriter::id)' to 'char&' 
    FunctionPass(&JVMWriter::id), targetData(td), out(o), classname(cls), debug(dbg) { 
       ^~~~~~~~~~ 

In file included from D:/dev/msys64/mingw64/include/llvm/Pass.h:388:0, 
       from D:/dev/msys64/mingw64/include/llvm/IR/DataLayout.h:27, 
       from D:/dev/msys64/mingw64/include/llvm/IR/Module.h:20, 
       from D:/dev/msys64/mingw64/include/llvm/IR/PassManager.h:46, 
       from D:/dev/msys64/mingw64/include/llvm/Analysis/LoopInfo.h:47, 
       from backend.h:29, 
       from backend.cpp:23: 
D:/dev/msys64/mingw64/include/llvm/PassAnalysisSupport.h: In instantiation of 'llvm::AnalysisUsage& llvm::AnalysisUsage::addRequired() [with PassClass = llvm::LoopInfo]': 

backend.cpp:52:27: required from here 
D:/dev/msys64/mingw64/include/llvm/PassAnalysisSupport.h:61:39: error: 'ID' is not a member of 'llvm::LoopInfo' 
    return addRequiredID(PassClass::ID); 

Meine offensichtliche Frage: warum es beschwert ist, dass ich eine nicht gültig bin versucht, Umwandlung? Ich sehe keinen solchen Versuch in diesen Fragmenten.

Antwort

0

char & pid erklärt pid als Verweis auf char, während Sie &id geben, die ein Zeiger auf char ist.

+0

Danke. Es war in der Tat eine einfache Lösung. Ich bin noch ein Anfänger in C++ Programmierung. – AmazingWouldBeGreatBut

0

Ersetzen Sie FunctionPass(&id) durch FunctionPass(id).

+0

Danke auch! In der Tat war es das. – AmazingWouldBeGreatBut

Verwandte Themen