我是初學C++程序員。所以這聽起來可能是一個非常簡單的問題。但我仍然感到困惑。C++中的全局對象表示重複的符號
我一直在想,爲什麼C++中的類以分號結尾,(;
)如union
和struct
。所以我創建了這個類文件。
// Test.h
#ifndef TEST_H
#define TEST_H
#include <iostream>
using namespace std;
class Test {
public:
Test();
~Test();
void setName(string);
string getName();
private:
string name;
} test1, test2; // This is what I called a `global object`
#endif
現在我創造了這樣一個實現:
// Test.cpp
#include "Test.h"
#include <iostream>
using namespace std;
Test::Test() {
cout << "Object created" << endl;
}
Test::~Test() {
cout << "Object destroyed" << endl;
}
void Test::setName(string name) {
this->name = name;
}
string Test::getName() {
return name;
}
Test.cpp
編譯成功。
g++ -c Test.cpp
這產生Test.o
文件:我用它編譯g++
這樣的編譯。
現在在我的Main.cpp
,這是我有:
// Main.cpp
#include "Test.h"
#include <iostream>
using namespace std;
int main() {
/* I did not declare test1 and test2 in main as they are already global. */
test1.setName("Smith");
test2.setName("Jones");
cout << test1.getName() << endl;
cout << test2.getName() << endl;
return 0;
}
的問題在編譯Main.cpp
出現了:
當我編譯它是這樣的:
g++ Main.cpp Test.o -o Test
它給我以下錯誤:
duplicate symbol _test1 in:
/var/folders/4q/9x9vs76s6hq2fpv11zwtxmvm0000gn/T/Main-a59cee.o
Test.o
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
那麼我應該如何得到這個工作?任何幫助?
在此先感謝:)
PS:我在一個macbook pro 64位。
還有一個建議,你說你是C++的初學者。尤其是避免在頭文件中使用'namespace'語句。當我們在cpp文件中實現名稱空間時,我們可以聲明'using namespace'。 – elimad 2014-09-26 12:03:55
} test1,test2 ...允許,但不尋常,並導致您的問題。單獨聲明與定義。 – 2014-09-26 12:19:49