C++ 对析构函数的 undefined reference

标签 c++ reference destructor undefined

对此很抱歉,但我正在重新打开它。在对本征错误进行排序后,这又重新出现了。完全相同的代码完全相同的错误。 (好吧,这次编译器找到了特征 header 。)所以,同样的问题:

我已经搜索了 destructor c++ 和 undefined reference 无济于事。不过,我很确定这是我的一个相当简单的失误。

错误:

/tmp/ccDsaJ9v.o: In function `main':
geomSetup.cpp:(.text+0x5ab): undefined reference to `SASAGeometry::~SASAGeometry()'
geomSetup.cpp:(.text+0x5cd): undefined reference to `SASAGeometry::~SASAGeometry()'
collect2: ld returned 1 exit status
make: *** [geomTest] Error 1

SASAGeometry.h:

class SASAGeometry
{
public:
//methods
  SASAGeometry() ;
  int makeFromFiles(char *, char *, char *) ;
  ~SASAGeometry() ;
//globals
  std::list<E......};

SASAGeometry.cpp

SASAGeometry::SASAGeometry(){}

int SASAGeometry::makeFromFiles(char * xyz_file, char * dat_file, char * atoms_file)
{
  sasa_transformMatrix basisMaker ;
  list<Vect...
...
}

SASAGeometry::~SASAGeometry(){}

几何测试.cpp

int main(int argv, char * argc[])
{
  list<Vector3d>::iterator listIterator ;
  char * xyz_file = argc[1] ;
  char * dat_file = argc[2] ;
  char * atoms_file = argc[3] ;
  SASAGeometry geomMaker ;
  int geomErr....

...
return 0 ;
}

生成文件:

# compiler choice
CXX = g++

# executable path
BIN = .

# include paths (or lack thereof :p)
INCLUDE = -I .

# compilation flags
CXXFLAGS = -pipe # -O6

# linking flags
LFLAGS = -lm

# object declarations
GeomTest_OBJS = geomTest.o SASAGeometry.o

geomTest_source     = SASAGeometry.cpp SASAGeometry.h sasa_transformMatrix.cpp sasa_transformMatrix.h geomSetup.cpp

SASAGeometry.o  :   SASAGeometry.cpp SASAGeometry.h sasa_transformMatrix.cpp sasa_transformMatrix.h

geomTest.o  :   geomSetup.cpp SASAGeometry.o

# compile 
geomTest    : $(GeomTest_OBJS) makefile
            $(CXX) -o geomTest.o -o SASAGeometry.o $(LIBS) $(INCLUDE) $(CXXFLAGS) $(geomTest_source) $(LFLAGS)
            $(CXX) $(LIBS) $(INCLUDE) $(CXXFLAGS) -o $(BIN)/geomTest geomTest.o SASAGeometry.o $(LFLAGS)

clean       : \rm *.o *~ p1

我的 INCLUDE 和 LIBS 标志都正常,SASAGeometry 类中的所有其他方法都非常愉快地定义。

提前致谢。

最佳答案

您没有将 SASAGeometry.cppgeomTest.cpp 一起包含在 makefile 中。 makefile 应该是这样的:

geomTest    : $(GeomTest_OBJS) makefile
            $(CC) -o geomTest.o -o SASAGeometry.o $(LIBS) $(INCLUDE) $(CFLAGS) $(geomTest_source) $(LFLAGS)
            $(CC) $(LIBS) $(INCLUDE) $(CFLAGS) -o $(BIN)/geomTest geomTest.o $(LFLAGS)

关于C++ 对析构函数的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7876105/

相关文章:

c++ - 是否可以重新分配 std::unique_ptr 以使其旧值在构造新值之前被销毁?

C++ static constexpr 成员在类外重新声明

c++ - 如何将 char 数组转换为 uintmax_t?

java - 通过字符串调用引用

c++ - 从 std::string *tab[11] 返回 const std::string*&

带指针的 C++ 结构 : constructor and destructor

c++ - 检索不同类型的对象指针

c++ - QTextEdit 作为 HTML 编辑器

c++ - 从函数交换并返回 Char 数组

c++ - 为什么这不提供多重定义错误?