编译错误:调用基类型构造函数时无效转换
问题描述:
我想在MinGW-64 lljvm下编译一个不太大的程序。但是我陷入了一个让我疯狂的错误。编译错误:调用基类型构造函数时无效转换
的代码如下:
backend.h
class JVMWritter {
...
static char id;
...
};
backend.cpp
char JVMWriter::id = 0;
JVMWriter::JVMWriter(): FunctionPass(&id) {}
现在,FunctionPass声明中Pass.h这样的:
Pass.h
class FunctionPass {
...
explicit FunctionPass (char &pid) : <initialization here> {}
...
};
当我尝试编译,我不断收到以下错误:
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);
我明显的问题:为什么是抱怨我在尝试一个非有效转换?我在这些片断中看不到这样的企图。
答
char & pid
声明pid
以char
的引用,而传递&id
这是一个指向char
。
谢谢。这确实是一个简单的解决方案。我仍然是C++编程的初学者。 – AmazingWouldBeGreatBut