1
// Main.cpp
#include <iostream>
#include "common.h"
#include "second.cpp"
#include <vector>

int main(){
  global = 10;
  ip.push_back("TestTest");
  std::cout << global << std::endl;
  TestClass t;
  t.print();
}

//common.h
#ifndef GLOBAL_H
#define GLOBAL_H
#include <vector> 
#include <string>
extern int global;
extern std::vector<std::string> ip ; 
#endif

// second.cpp

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

int global;

class TestClass{

  public:
    void print();};
void TestClass::print(){
  global++;
  std::cout << "Global: "<<global << std::endl;
  std::cout << "IP String: "<<ip[0] << std::endl;
}

// Console Error
ubuntu:deleteme$ g++ main.cpp
/tmp/ccoJpYRl.o: In function `TestClass::print()':
main.cpp:(.text+0x55): undefined reference to `ip'
/tmp/ccoJpYRl.o: In function `main':
main.cpp:(.text+0xdd): undefined reference to `ip'
collect2: error: ld returned 1 exit status

上記は、int global変数を使用しているときだけ機能します。ただし、ベクトルを追加するipと、表示されたcommon.hエラーが発生します。

これは基本的なことのようですが、答えが得られませんでした。

前もって感謝します :)

4

1 に答える 1

1

を定義していませんstd::vector<std::string>。extern を使用すると、グローバルであるが別の場所で定義されていることを宣言するだけです。あなたの下に定義を追加する必要がありint globalますsecond.cpp

// second.cpp

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

int global;
std::vector<std::string> ip;

class TestClass{

余談ですが、グローバルは使用しないでください。

于 2013-04-18T05:05:43.713 に答える