c++关于构造函数传参问题

aa1459525376 2018-05-25 11:06:00
各位大神,我直接定义一个string变量给_program_name赋值,但编译报代码段有错,实在看不出哪里出了问题。
错误信息:
/tmp/cclHN03G.o: In function `globaWrapper::program_name(std::string const&)':
test.cpp:(.text._ZN12globaWrapper12program_nameERKSs[_ZN12globaWrapper12program_nameERKSs]+0x18): undefined reference to `globaWrapper::_program_name'
test.cpp:(.text._ZN12globaWrapper12program_nameERKSs[_ZN12globaWrapper12program_nameERKSs]+0x26): undefined reference to `globaWrapper::_program_name'
collect2: error: ld returned 1 exit status




#include <string>
#include <iostream>

using namespace std;

class globaWrapper{

public:

static string program_name(const string& npn)
{
_program_name = npn;
return _program_name;
}

public:
static string _program_name;

};

int main()
{
static string aa = "qqq";
cout << globaWrapper::program_name(aa) << endl;
return 0;
}
...全文
433 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_38788349 2018-05-25
  • 打赏
  • 举报
回复
引用 4 楼 aa1459525376的回复:
对,我的类是没有实例化,我想问这句代码有声明作用吗

string globaWrapper::_program_name;
你的类既没有实例化 静态成员函数也没有初始化 你哪有地址访问
jiht594 2018-05-25
  • 打赏
  • 举报
回复
引用 4 楼 aa1459525376 的回复:
对,我的类是没有实例化,我想问这句代码有声明作用吗

string globaWrapper::_program_name;
static成员变量在类里面的是声明。 需要在类外定义和初始化。
jiht594 2018-05-25
  • 打赏
  • 举报
回复
至于为什么一定在类外?因为静态成员变量是独立于类对象的、所以在类外初始化,这样看起来合理一些。奇怪的地方多了去了,记住是龟腚就行了。
aa1459525376 2018-05-25
  • 打赏
  • 举报
回复
对,我的类是没有实例化,我想问这句代码有声明作用吗

string globaWrapper::_program_name;
qq_38788349 2018-05-25
  • 打赏
  • 举报
回复
你的类好像没有实例化
aa1459525376 2018-05-25
  • 打赏
  • 举报
回复
按你说的,在class和main之间加上这一句,编译就过了,运行也没问题,这个为什么

string globaWrapper::_program_name;
jiht594 2018-05-25
  • 打赏
  • 举报
回复
using namespace std;
class globaWrapper{
     
    public:
     
        static string program_name(const string& npn)
        {
            _program_name = npn;
            return _program_name;
        }
     
    public:
        static string _program_name;
     
};
string globaWrapper::_program_name;
int main()
{
    static string aa = "qqq";
    cout << globaWrapper::program_name(aa) << endl;
    return 0;
}
aa1459525376 2018-05-25
  • 打赏
  • 举报
回复
这么说就懂了,谢谢各位大神了。
paschen 版主 2018-05-25
  • 打赏
  • 举报
回复
不是不能赋值,而是静态变量你要初始 在main上面全局空间加上:string globaWrapper::_program_name; 就可以了

64,678

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧