c++ - C++ 中对命名空间的 undefined reference

标签 c++ namespaces

我在尝试使用我的命名空间中的变量时收到 undefined reference 。我创建了一个头文件和一个其中包含命名空间的实现文件,并试图在另一个文件中使用该命名空间...

已编辑:

//first.h
namespace first
{
  extern int var;
  extern int multiplyVar(int);
}

//first.cpp
namespace first
{
  int var = 5;
  int multiplyVar(int mult)
  {
    return mult * var;
  }
}

//someOtherFile.h
#include "first.h"

//someOtherFile.cpp
first::var = 3;
int newVar = first::multiplyVar(3);

//error
undefined reference to  'first::multiplyVar(...)'
undefined reference to 'first::var'

编辑实际代码

//jFork.h
#ifndef JFORK_H
#define JFORK_H

#include <iostream>
#include <string>

using namespace std;

namespace jFork
{
  extern int sockfd, newsockfd;
  int j_fork(string);
}

#endif //JWDSFORK_H

//jFork.cpp
namespace jFork
{
  int sockfd = 0, newsockfd = 0;

  int j_fork(string name)
  {
    cout<<"Preparing to fork: "<<name<<endl;

    int rv = fork();

    cout<<"Called fork(): "<<name<<endl;

    switch(rv)
    {
    case -1:
        cout<<"Exiting..."<<endl;
        exit(EXIT_FAILURE);
        break;
    case 0:
        if(sockfd)
        {
            cout<<"Closing sockfd: "<<name<<endl;
            close(sockfd);
            sockfd = 0;
        }

        if(newsockfd)
        {
            cout<<"Closing newsockfd: "<<name<<endl;
            close(newsockfd);
            newsockfd = 0;
        }

        break;
    default:
        cout<<"Preparing to sleep: "<<name<<endl;
        sleep(1);
        cout<<"Woke up from sleep"<<name<<endl;
        break;
    }

    return rv;
  }
}

//server.cpp
int pid = jFork::j_fork(name);

最佳答案

注意在实现文件的命名空间中没有用于函数声明和定义符号的 extern

//first.h
namespace first
{
  extern int var;
  extern int multiplyVar(int);
}

//first.cpp
var = 5;
extern int multiplyVar(int mult)
{
  return mult * var;
}

应该是

//first.h
namespace first
{
  extern int var;
  int multiplyVar(int);
}

//first.cpp
namespace first
{
   int var = 5;
   int multiplyVar(int mult)
   {
     return mult * var;
   }
}

关于c++ - C++ 中对命名空间的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10535221/

相关文章:

c++ - 在类默认构造函数中初始化 2x2 矩阵

c++ - 复制构造函数问题李普曼

c++ - 如何在 CUDA 中实现压缩表?

spring - 在命令行中运行 Spring 应用程序时出现无法识别的 xbean 命名空间映射异常

c# - 为特定文件禁用 Resharper 的 "Adjust namespace"

c++ - 在一个函数中使用 namespace 中的符号,但在同一文件中不使用另一个 namespace 中的符号

c# - 为 .NET 应用启用高性能 GPU

c++ - 命名空间 header 中的 "using namespace"

oracle - oracle 12.2.0.1 中的命名空间 sys_Session_roles 在 sql 查询中工作,但不在 plsql block 内

c# - 'ListViewWebPart' 是一个 'namespace' 但像 'type' 一样使用