假設我們有以下文件(從C通過B.Stroustup ++編程語言所):C++雙聲明/定義?
stack.h
namespace Stack{
void push(int);
int pop();
class Overflow{};
}
stack.cpp
#include "stack.h"
namespace Stack{
const int max_size = 1000;
int v[max_size];
int top;
class Overflow{};
}
void Stack::push(int elem){
if(top >= max_size){
throw Overflow();
}
v[top++] = elem;
}
int Stack::pop(){
if(top <= 0){
throw Overflow();
}
return v[--top];
}
我不明白爲什麼stack.h中的類Overflow {}的聲明/定義(?)也必須寫入stack.cpp中?
寫這樣的代碼是完全正確的嗎?
UPDATE
的main.cpp
#include <iostream>
#include "stack.h"
using namespace std;
int main(){
try{
int a = 0;
while(true){
Stack::push(a++);
}
} catch(Stack::Overflow){
cout << "Stack::Overflow exception, YEAH!" << endl;
}
return 0;
}
予編譯代碼與: 克++ main.cpp中stack.cpp -o主
克++的i686-Apple蘋果darwin11-llvm-g ++ - 4.2(GCC)4.2.1(基於Apple Inc. build 5658)(LLVM build 2336.11.00)
UPDATE
嘗試過克++(Ubuntu的/ Linaro的4.7.3-1ubuntu1)(溶液)4.7.3代碼給我一個錯誤:stack.cpp:7:9:錯誤:重新定義'class Stack :: Overflow'。這當然是正確的。
摘要:前面說過的在g ++上的mac版本有一個bug。
對我來說很奇怪。 –