吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 522|回复: 6
收起左侧

[求助] C++命名空间

[复制链接]
wuyingjie2022 发表于 2023-12-29 21:49
本帖最后由 苏紫方璇 于 2023-12-30 21:07 编辑

[C++] 纯文本查看 复制代码
#include <iostream>
#include "test2.h"
using namespace std;//声明使用标准命名空间
int main()
{

        cout<<test2::a1<<"\n"<<endl;
        test2::test();
        system("pause");
        return 0;
}

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
[C++] 纯文本查看 复制代码
#pragma once
#include<iostream>
namespace test2
{
        int a1 = 6;       
        void test();
};

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
[C++] 纯文本查看 复制代码
#include<iostream>
#include"test2.h"
void test2::test()
{
        std::cout << "test2" << std::endl;
        return;
}


命名空间里面不能同时存在变量和函数吗?变量和函数同时存在命名空间内则程序报错,找到一个或多个重定义符号,单独存在函数或者单独存在变量则没问题

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

bester 发表于 2023-12-29 22:18
好像跟命名空间无关,大概的意思应该是如果在头文件中声明全局变量,会被多次包含导致重复定义,解决方案:
#pragma once
#include<iostream>
namespace Test
{
        extern int MyTemp;  //加static 或者是extern
        void test();
}
int M_temp = 1; //非命名空间也报错 加上static就可解决


错误解释的官方文档https://learn.microsoft.com/zh-c ... 26l%3DZH-CN%26k%3Dk(LNK2005)%26rd%3Dtrue
QvQsuipian 发表于 2023-12-29 22:28
命名空间可以同时存在变量和函数,没有问题。程序报错可能是因为变量或函数被重复定义了,即在多个地方都定义了同名的变量或函数。可以尝试使用头文件保护宏(#pragma once或#ifndef)来防止多次包含同一个头文件,或者将变量和函数定义在不同的源文件中,避免重复定义。
DEATHTOUCH 发表于 2023-12-29 23:25
前面说的没问题,头文件不要搞变量,要搞就按照沙发楼提供的方法;如果头文件的函数比较简单直接在里面实现的话需要加inline修饰。
go4399 发表于 2023-12-30 00:16
定义和声明要分开
jamesAbc 发表于 2023-12-30 10:56
int a1 = 6;       这句话有问题,会导致变量重复定义,使用extern声明
 楼主| wuyingjie2022 发表于 2023-12-30 18:20
总的来说  变量在头文件里面声明 而且必须加  extern   并且变量的初始化得在.cpp里面实现,不能在头文件中初始化
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 18:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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