Je suis en train de compiler sous MinGW-64 lljvm, un programme pas si gros. Mais je suis coincé sur une erreur qui me rend fou.Erreur de compilation: conversion non valide lors de l'appel du constructeur de type base
Le code est le suivant:
backend.h
class JVMWritter {
...
static char id;
...
};
backend.cpp
char JVMWriter::id = 0;
JVMWriter::JVMWriter(): FunctionPass(&id) {}
Maintenant, FunctionPass est déclaré dans Pass.h comme ceci:
Pass.h
class FunctionPass {
...
explicit FunctionPass (char &pid) : <initialization here> {}
...
};
Lorsque je tente de compiler, je continue à obtenir l'erreur suivante:
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);
Ma question évidente: pourquoi est-il se plaindre que je tente un non valide conversion? Je ne vois pas une telle tentative dans ces fragments.
Merci. C'était en effet une solution facile. Je suis toujours un débutant en programmation C++. – AmazingWouldBeGreatBut