测试User Defined Header File等问题

Testing User Defined Header File and other questions

我对测试用户定义的头文件有疑问。 所以,这里是例子。

#include <iostream>
using namesapce std;

#include "header.h"
#include "header.h" // I wonder the reason why I need to write this down two time for testing ifndef test.

int main() 
{
  cout << "Hello World!" << endl;
  cin.get();
}

我了解到我需要在driver.cpp中写下用户定义的头文件名两次。但是,我不明白为什么我需要这样做。

还有,这里是第二个问题。

#include <iostream>
#include <fstream>
using namesapce std;

int main()
{
  fstream fin;
  fin.open("info.txt");

  if(!fin.good()) throw "I/O Error\n"; // I want to know what throw exactly do.
  else cout << "Hello World!\n";

  cin.get();
}

所以,我的问题是throw的函数。 我意识到如果我使用 throw 而不是 cout,我的编译器就会被终止。 我想知道 throw 究竟是做什么的。

由于我是新来的,我可能在格式和一些规则上犯了一些错误,所以如果我犯了错误,请随时指出。

谢谢!

对于您的第一个问题,请想象以下示例:

MyHelper.cpp

int sum( int first , int second )
{
    return first + second;
}

test.cpp

#include<iostream>
#include"MyHelper.cpp"
#include"MyHelper.cpp"

int main()
{
    std::cout << sum(2,4) << std::endl;
}

现在如您所知,预编译器将#include"MyHelper.cpp" 行替换为相应文件的内容。

// here comes the code from iostream header
// ...
int sum( int first , int second )
{
    return first + second;
}
int sum( int first , int second )
{
    return first + second;
}

int main()
{
    std::cout << sum(2,4) << std::endl;
}

这是编译器接收到的代码。如您所见,符号 sum 现在被定义了不止一次。所以编译器将退出并出现如下错误:

t.c: In function ‘int sum(int, int)’:
t.c:7:9: error: redefinition of ‘int sum(int, int)’
     int sum( int first , int second )
         ^
t.c:3:9: note: ‘int sum(int, int)’ previously defined here
     int sum( int first , int second )
         ^

换句话说,如果您的 includeguard 有问题,编译器会向您报告此错误。

第二个问题:

throws 用于抛出异常。我认为有数以千计的异常教程。只需向您选择的搜索引擎询问 "C++ exceptions tutorial" 并关注其中的一个或两个。例如下面的一个:

http://www.learncpp.com/cpp-tutorial/152-basic-exception-handling/

(如果您只对用例感兴趣,请向下滚动到 "A more realistic example")