【发布时间】:2013-08-19 15:26:13
【问题描述】:
我正在尝试重载尖叫 (!) 运算符以返回向量的长度,如下所示: (!因为它有点像小写的“L”,为了简洁和可读性,我想要一个一元运算符。)
// Vector class in Vector.h
class Vector {
public:
double x,y,z;
/* ... */
double operator ! (); /* Vector length */
/* ... */
}
// Function definition in Vector.cpp
double Vector::operator ! (){
return sqrt(x*x+y*y+z*z);
}
// Main function in main.cpp
#include "vector.h"
int main (int argc, char** argv){
Vector a = Vector(1,2,3);
cout << !a << endl;
}
我从 gcc 得到的错误代码是:
$ gcc -lstdc++ main.cpp
Undefined symbols for architecture ********:
"Vector::operator!()", referenced from:
_main in ********.o
ld: symbol(s) not found for architecture ********
collect2: ld returned 1 exit status
(注意:我找不到这个问题的答案,要么是由于缺乏 C++ 经验,要么是因为我试图做的事情违反了我因自学而跳过的语言的一个非常基本的租户。 )
【问题讨论】:
-
看起来你可能忘记在编译行中添加
Vector.cpp了。 -
使用 g++ 代替 gcc
-
你在
vector.cpp里面有#include "vector.h"吗?
标签: c++ gcc compiler-errors operator-overloading unary-operator