gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 08:04:41 24 4
gpt4 key购买 nike

我在尝试使用我的命名空间中的变量时收到 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com