对未在"中使用的不同源文件中声明的向量的未定义引用,如果"声明

时间:2016-03-20 03:31:43

标签: c++

我创建了一个包含许多数据结构(地图,矢量,数组)的源文件。其头文件在主文件中为#included

主文件如下所示:

#include "reachability.h" //Where monkey() and vector<int> int_req are declared

main()
{
    monkey(int_req); // Calling monkey(int_req) here is OK! Bar is visible

    ... 

    ifstream fp("foo.txt"); 
    if(fp.is_open())
    {
       std::string line; 
       while( getline(fp,line) )
       {
           monkey(int_req); //'int_req' is an undefined reference!
       }
    }
}

reachability.h

#ifndef REACHABILITY_H
#define REACHABILITY_H

extern std::vector<int> int_req; 

void monkey(std::vector<int> feces); 

#endif

reachability.cc

std::vector<int> int_req; 

void monkey(std::vector<int> thrown_obj)
{ 
   ... //Iteration and dereferencing of "thrown_obj"
}

我访问了在main范围内的for循环中reachability.cc中声明的数据结构, 。尽管如此,在这个if语句中发生了一些不稳定的事情。

编译器错误:

lab1.o: In function `main':
/home/ubuntu/workspace/ECE597/Lab1/lab1.cc:105: undefined reference to `int_req'
collect2: error: ld returned 1 exit status

已编辑:reachability.cc包含在compiliation中:

elusivetau:~/XXXX/XXXX/XXXX $ g++ lab1.cc parser.cc gate.cc reachability.cc -o run
/tmp/ccJK4O9q.o: In function `main':
lab1.cc:(.text+0x489): undefined reference to `int_req'
collect2: error: ld returned 1 exit status

编辑:此程序的makefile:

all: lab1.o parser.o gate.o reachability.o
    g++ -g lab1.o parser.o gate.o reachability.o -o run

lab1.o: lab1.cc 
    g++ -g -c lab1.cc 

parser.o: parser.cc 
    g++ -g -c parser.cc 

gate.o: gate.cc
    g++ -g -c gate.cc

reachability.o: reachability.cc
    g++ -g -c reachability.cc

clean: 
    rm *o run

1 个答案:

答案 0 :(得分:1)

无论是什么,您都没有向我们提供正确的信息。

我添加了包含并删除了非代码以进行此编译。瞧,它还链接:

TEST.CPP:

#include "reachability.h" //Where monkey() and vector<int> int_req are declared
#include <string>
#include <iostream>
#include <fstream>

main()
{
    monkey(int_req); // Calling monkey(int_req) here is OK! Bar is visible

    std::ifstream fp("foo.txt");
    if(fp.is_open())
    {
       std::string line;
       while( getline(fp,line) )
       {
           monkey(int_req); //'int_req' is an undefined reference!
       }
    }
}

reachability.h:

#ifndef REACHABILITY_H
#define REACHABILITY_H

#include <vector>

extern std::vector<int> int_req;

void monkey(std::vector<int> feces);

#endif

reachability.cpp:

#include "reachability.h"

std::vector<int> int_req;

void monkey(std::vector<int> thrown_obj)
{
}

这个编译和链接就好了。你没有打扰创建一个mvce

,而是在引导我们进行疯狂的追逐