c++ - 我的第一个 C++ 类(和错误)

标签 c++ compiler-errors

我尝试了从我在办公室找到的一本书中摘取的朴素类(class)。

就是这样:

#include <iostream.h>
#include <math.h>

const double ANG_RAD = 0.017;

class Angulo {
  double valor;

public:
  void act_valor( double );
  double seno( void );
  double coseno( void );
  double tangente( void );
} grado;

void Angulo::act_valor( double a ) {
  valor = a;
}

double Angulo::seno(void)
{
  double temp;
  temp = sin( ANG_RAD * this.valor );
  return( temp );
}
double Angulo::coseno(void)
{
 double temp; 
 temp = cos(ANG_RAD * valor );
 return (temp);
}
double Angulo::tangente(void)
{
 return ANG_RAD * valor;
}

main()
{
 grado.act_valor( 60.0 );
 cout << "El seno del angulo es " 
      << grado.seno() << "\n";
 return(0);
}

我编译了,这是我得到的错误信息(我现在明白为什么人们提示 C++ 了)

In file included from /usr/include/c++/4.2.1/backward/iostream.h:31,
                 from Angulo.cc:1:
/usr/include/c++/4.2.1/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.
Undefined symbols:
  "std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)", referenced from:
      _main in ccg0526i.o
      _main in ccg0526i.o
  "std::ios_base::Init::Init()", referenced from:
      __static_initialization_and_destruction_0(int, int)in ccg0526i.o
  "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::size() const", referenced from:
      std::__verify_grouping(char const*, unsigned long, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)in ccg0526i.o
  "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator[](unsigned long) const", referenced from:
      std::__verify_grouping(char const*, unsigned long, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)in ccg0526i.o
      std::__verify_grouping(char const*, unsigned long, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)in ccg0526i.o
      std::__verify_grouping(char const*, unsigned long, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)in ccg0526i.o
  "___gxx_personality_v0", referenced from:
      Angulo::act_valor(double)in ccg0526i.o
      Angulo::tangente()     in ccg0526i.o
      std::__verify_grouping(char const*, unsigned long, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)in ccg0526i.o
      ___tcf_0 in ccg0526i.o
      Angulo::cosen()     in ccg0526i.o
      Angulo::seno()     in ccg0526i.o
      _main in ccg0526i.o
      unsigned long const& std::min<unsigned long>(unsigned long const&, unsigned long const&)in ccg0526i.o
      __static_initialization_and_destruction_0(int, int)in ccg0526i.o
      global constructors keyed to gradoin ccg0526i.o
      CIE in ccg0526i.o
  "std::ios_base::Init::~Init()", referenced from:
      ___tcf_0 in ccg0526i.o
  "std::basic_ostream<char, std::char_traits<char> >::operator<<(double)", referenced from:
      _main in ccg0526i.o
  "std::cout", referenced from:
      _main in ccg0526i.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

有人能告诉我发生了什么事吗?

我的编译器:

Using built-in specs.
Target: i686-apple-darwin10
Configured with: /var/tmp/gcc/gcc-5664~38/src/configure --disable-checking --enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin10 --program-prefix=i686-apple-darwin10- --host=x86_64-apple-darwin10 --target=i686-apple-darwin10 --with-gxx-include-dir=/include/c++/4.2.1
Thread model: posix
gcc version 4.2.1 (Apple Inc. build 5664)

我仔细检查了这本旧书的来源,结果是一样的。

谢谢。

最佳答案

你的书已经过时了。您使用的编译器要现代得多,所以它只是拒绝翻译旧的非标准代码。您很有可能以某种方式使它正常工作,但更新代码以使其成为标准 C++ 更有意义。总的来说代码看起来不错,只需要做一些改动。

您应该使用的 header 是 <iostream> , 不是 <iostream.h> .编译器已经告诉你了。此外,标准库的组件现在位于命名空间 std 中, 所以 main 中的输出行应该如下所示

std::cout << "El seno del angulo es " << grado.seno() << "\n";

main函数必须显式声明返回类型

int main()
{

C++ 语言并不暗示 int默认情况下像 C 一样。

作为附加的、不太重要的评论,没有必要将无参数函数声明为 (void)在 C++ 中。区区 ()具有完全相同的效果。虽然如果你喜欢(void)更好,它也会起作用。此外,无需采用 return 的参数。在() .你可以只说 return 0; .看到不一致的returns也很奇怪- 一些带有 ()还有一些没有 () .书上是这样的吗?

关于c++ - 我的第一个 C++ 类(和错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3640303/

相关文章:

c++ - 如何判断包含头文件的位置?

c++ - AudioUnit 中的输入缓冲区结构

C++ 为什么我的循环中断了?

c++ - 如何用某种颜色填充 QGraphicsRectItem?

c - GCC 透明联盟

C++03 根据成员函数值查找元素

python-3.x - flask 应用程序中的ldap3绑定(bind)语法错误

perl - "error: variable length array of non-POD element type"编译 re::engine::RE2 时

java - 无法将我的任何项目导出到 .jar 文件中

ios - FBSOpenApplicationErrorDomain 代码=3