2014-09-03 18 views
0

我有一個簡單的程序,我上課做,我發現了一個程序的示例使用使用的main.cpp和Foo.cpp中

.h foo.cpp and main.cpp

我進入該程序,並得到它編譯罰款,但當我將拆分礦移動時,我無法編譯它。

從其他.cpp文件中運行main方法的典型過程是什麼?

這裏是我的運行目前的方案,

main.cpp 

#include <iostream> 
#include "cars.h" 

std::ostream& operator<<(std::ostream& s, const cars& c) { 
    return s << c.make << ' ' << c.model << ' ' << c.col << ' ' << c.wheels; 
} 

int main() { 

    cars c("Audi", "A4", "Black", "4"); 
    cars q(c); 

    std::cout << c << '\n'; 

    std::cout << q << '\n'; 

    return 0; 
} 

如果我想創建一個cars.cpp文件,並把它分解,所以我只是cout在main方法我會遵循什麼規則嗎?

例如我應該在main.cpp或應該移動到cars.cpp

我明顯可以複製我發現的其他程序,但我想明白這一點。

也不,這不是任務。我完成了它我想知道如何做到這一點,因爲我是一個超級英雄,他喜歡超越其他人。

+0

「使用'.h foo.cpp和main.cpp'」是什麼意思?你是說你有一個名字只是'.h'的文件嗎? – 2014-09-03 20:50:55

+0

[C++頭文件,代碼分離]可能的重複(http://stackoverflow.com/questions/280033/c-header-files-code-separation) – bolov 2014-09-03 20:51:22

+0

不,我正在說明一個我想弄明白的例子。在我發佈的程序中,您可以清楚地看到我包含cars.h文件。因此,如果我有一個類,它會在cars.cpp中運行,那麼main.cpp會繼承它?以及如何獲取main.cpp繼承cars.cpp – wuno 2014-09-03 20:52:12

回答

2

cars.h添加

extern std::ostream& operator<<(std::ostream& s, const cars& c); 

移動實現,

std::ostream& operator<<(std::ostream& s, const cars& c) { 
    return s << c.make << ' ' << c.model << ' ' << c.col << ' ' << c.wheels; 
} 

cars.cpp

+0

好吧,我應該覆蓋cars.cpp?使用extern然後使用朋友更好嗎?我正在使用同一行,但是'朋友' – wuno 2014-09-03 20:54:52

+0

Q1:是的。 Q2:'extern'行提供了該函數的聲明。在C++中,每個函數必須在可以使用之前聲明。在這種情況下,如果沒有聲明,'cout << c'將無法編譯。 – 2014-09-03 21:00:42

+0

@NDiaz它增加了一個可選的但不必要的decl部分('extern')到另外完全有效的[** function prototype **](http://en.wikipedia.org/wiki/Function_prototype),該條款其中的答案是真正的肉(並且是正確的+1)。在您的閒暇時間添加'extern',但原型本身對全球訪問任何想要使用該操作符的用戶都至關重要,並且包含該頭文件以便這樣做。把它看作是一個聲明,說這個函數存在於稍後要被鏈接的代碼中。 – WhozCraig 2014-09-03 21:01:36

1
  1. 移動運營商的ostream在cars.cpp
  2. 添加聲明,它在cars.h
  3. 包含的iostream在cars.h

我認爲cars.cpp包括cars.h已經?

+0

謝謝你這個清單是有幫助的。 – wuno 2014-09-03 21:03:43

相關問題