鱼C论坛

 找回密码
 立即注册
查看: 2490|回复: 5

C++ 类静态变量模板问题

[复制链接]
发表于 2020-11-10 19:27:42 | 显示全部楼层 |阅读模式
20鱼币
如题,直接上代码(注释说明一切)
#include <cstdio>
#include <iostream>

using namespace std;

template<typename T>
class Demo
{
public:
        Demo()
        {
                printf("Demo create %d!\n", sizeof(T));
        }

        void print()
        {
                printf("%d\n", sizeof(T));
        }

        void print2(T v)
        {
                cout << v << endl;
        }
};

class User
{
public:
        template<typename T> static Demo<T> demo;
};

int main()
{
        // 下面两行会报LNK1120: 1 个无法解析的外部命令
        // User::demo<int>.print();
        // User::demo<int>.print2(1);

        // 即使执行了下面一行,依旧没有调用Demo类的构造函数
        User::demo<int>;

        getchar();
        return 0;
}
IDE:VS2017 C++14标准

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-10 20:11:09 From FishC Mobile | 显示全部楼层
static 变量要在main函数外面定义。
在31行添加
Demo<int> User::demo;

在main里调用为
demo. print1();
demo. print2();
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-10 20:14:04 From FishC Mobile | 显示全部楼层
本帖最后由 xieglt 于 2020-11-13 19:10 编辑

另外,类里变量的声明这样写
class User
{
public:
       static Demo<int> demo;
};
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-10 20:15:47 From FishC Mobile | 显示全部楼层
静态变量的生成在主函数之前。先执行静态对象的构造函数,再执行主函数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-11-13 18:56:57 | 显示全部楼层
xieglt 发表于 2020-11-10 20:15
静态变量的生成在主函数之前。先执行静态对象的构造函数,再执行主函数。

抱歉,最后我的解决方法不是这样的,而是:
class User
{
public:
        template<typename T> static Demo<T> demo;
};

template<typename T> Demo<T> User::demo;

int main()
{
        User::demo<int>.print();

        getchar();
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-13 19:10:06 From FishC Mobile | 显示全部楼层
lhgzbxhz 发表于 2020-11-13 18:56
抱歉,最后我的解决方法不是这样的,而是:

不用抱歉,你既然喜欢你那个语法,当我什么也没说。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 17:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表