包含特征库时编译错误

问题描述 投票:0回答:1

我目前正在使用 eigen 库,这是我包含 eigen 的唯一文件: Kraftwerk2.cpp:

#include "Kraftwerk2.h"

Kraftwerk2::Kraftwerk2(int n){ //n: num instances
    Connectivity_mat.resize(n,n);
}

int Kraftwerk2::Parse_Inst_Name(string s){ //input: String("M12"), output: int 12
    return stoi(s.substr(1));
}

void Kraftwerk2::Generate_Connectivity_matrix(unordered_map<string, net> map){
    for(auto& it : map){
        int n =it.second.net_pin.size();
        for(int i=0; i<n; i++){
            for(int j=i+1; j<n; j++){
                Connectivity_mat(i,j) = Connectivity_mat(i,j) +1;
            }
        }
    }
}

void Kraftwerk2::Print_Mat(){
    IOFormat CleanFmt(4, 0, ", ", "\n", "[", "]");
    cout << Connectivity_mat.format(CleanFmt);
}

Kraftwerk2.h:

#include <iostream>
#include <Eigen/Core>
#include "module.h"
using namespace std;
//    unordered_map<string, instance> instances;
//    unordered_map<string, net> nets;
using namespace Eigen;

class Kraftwerk2{
    public:
        Kraftwerk2(int);
        MatrixXd Connectivity_mat;
        int Parse_Inst_Name(string);
        void Generate_Connectivity_matrix(unordered_map<string, net>);
        void Print_Mat();
};

我使用makefile进行编译:

(我对 makefile 还很陌生,所以如果有什么我可以改进的地方,请告诉我) (Eigen安装在工作目录./eigen)

# CC and CFLAGS are varilables
CC = g++ 
CFLAGS = -c
OPTFLAGS = -O2

DBGFLAGS = -g -D_DEBUG_ON_
# make all
all : bin/partition
    @echo -n "make complete!"

# optimized version
bin/partition: main_opt.o FM.o partition.o module.o Kraftwerk2.o
    $(CC) $(OPTFLAGS) main_opt.o FM.o partition.o module.o Kraftwerk2.o -o bin/partition
main_opt.o: src/main.cpp  src/FM_alg.h src/partition.h src/module.h src/Kraftwerk2.h
    $(CC) -I ./eigen $< -o $@

FM.o: src/FM_alg.cpp src/FM_alg.h
    $(CC) $(CFLAGS) $(OPTFLAGS) $< -o $@
partition.o: src/partition.cpp src/partition.h
    $(CC) $(CFLAGS) $(OPTFLAGS) $< -o $@
Kraftwerk2.o: src/Kraftwerk2.cpp src/Kraftwerk2.h
    $(CC) ./eigen $(CFLAGS) $(OPTFLAGS) $< -o $@
module.o: src/module.cpp src/module.h
    $(CC) $(CFLAGS) $(OPTFLAGS) $< -o $@

# clean all the .o and executable files
clean:
        rm -rf *.o lib/*.a lib/*.o bin/*

但是,当我制作时,终端似乎输出一些来自库本身的错误(???

g++  -I ./eigen src/main.cpp -o main_opt.o
In file included from ./eigen/Eigen/Core:269,
                 from src/Kraftwerk2.h:2,
                 from src/main.cpp:4:
./eigen/Eigen/src/Core/util/IndexedViewHelper.h:69:23: error: declaration of ‘template<class first> constexpr Eigen::Index Eigen::internal::first(const first&)’ shadows template parameter
   69 | EIGEN_CONSTEXPR Index first(const T& x) EIGEN_NOEXCEPT { return x.first(); }
      |                       ^~~~~
./eigen/Eigen/src/Core/util/IndexedViewHelper.h:68:10: note: template parameter ‘first’ declared here
   68 | template<typename T>
      |          ^~~~~~~~
make: *** [makefile:15: main_opt.o] Error 1

如果有人能告诉我这有什么问题,我将不胜感激。

c++ makefile build eigen
1个回答
0
投票

哥们,你知道你是怎么解决的吗?我也有同样的问题。已经快2年了。如果您发现问题所在并能告诉它,那就太好了。

问候,Ifrahle。

© www.soinside.com 2019 - 2024. All rights reserved.