0

我的编译器发出以下错误:

matrix.o: In function `Matrix::modify_cell(unsigned int, unsigned int, int)':
Matrix.cpp:(.text+0x5f): undefined reference to `operator!(Dim)'
Matrix.cpp:(.text+0xa3): undefined reference to `operator!(Dim)'
Matrix.cpp:(.text+0x178): undefined reference to `operator!(Dim)'
Matrix.cpp:(.text+0x1a0): undefined reference to `operator!(Dim)'
matrix.o: In function `List::nula(Dim) const':
Matrix.cpp:(.text._ZNK4List4nulaE3Dim[List::nula(Dim) const]+0x11): undefined reference to `operator!(Dim)'
list1.o:List - auxiliary methods.cpp:(.text+0x3b): more undefined references to `operator!(Dim)' follow
collect2: ld returned 1 exit status
make: *** [app] Error 1

Matrix 是放置在文件 Matrix.h 和 Matrix.cpp 中的类,它继承自类 List,而后者又放置在 List.h 和其他两个 .cpp 文件中。键入 Dim (typedef) 和运算符!因为它在包含到 List.h 和操作员的 aux.h 中全局声明(在任何类之外)!在 aux.cpp 中定义。在 Matrix.h 我包括 List.h 所以我不明白是什么问题。aux.cpp 确实在我的 makefile 中编译为 .o,然后加入到单个应用程序中。

我知道最好将我的 typedef Dim 及其重载运算符放入一个类中,但它在类 List 和类 Matrix 中都使用,而 typedef 没有被继承,我不知道任何其他解决方法。

编辑:

// aux.cpp
#include "aux.h"
Dim operator!(Dim dim) { return dim == COL ? ROW : COL; }

// aux.h
#ifndef AUX_H
#define AUX_H

/* (...) */

typedef enum { ROW, COL } Dim;
inline Dim operator!(Dim dim);

#endif
4

1 回答 1

1

您已声明operator!(Dim)为内联,因此除非您还在 .h 中包含定义,否则它不可用。要么移动定义,要么取出inline.

于 2012-11-29T19:34:12.127 回答