C++ 访问.cpp中定义的某些静态变量,同时其类类型也在.cpp中定义

C++ 访问.cpp中定义的某些静态变量,同时其类类型也在.cpp中定义,c++,c,C++,C,我想我陷入了一种情况,我需要修改一些在某种意义上“受保护”的东西。我四处奔波,没有找到一个合适的解决方案,或者它实际上是无法解决的 A.h A.cpp 我想做的基本上是找到一种方法,在不更改a.h和a.cpp的情况下从外部操纵另一个源文件中的队列,因为类a和B不提供操纵队列的方法 C.cpp #包括“A.h” void C() { 队列=0; } 非常感谢您的评论 在A.cpp之外,没有方法访问队列静态提供变量内部链接,使其在翻译单元外部不可见。时段。在A.cpp之外,没有方法访问队列静态提供

我想我陷入了一种情况,我需要修改一些在某种意义上“受保护”的东西。我四处奔波,没有找到一个合适的解决方案,或者它实际上是无法解决的

A.h

A.cpp

我想做的基本上是找到一种方法,在不更改a.h和a.cpp的情况下从外部操纵另一个源文件中的队列,因为类a和B不提供操纵队列的方法

C.cpp

#包括“A.h”
void C()
{
队列=0;
}


非常感谢您的评论

A.cpp
之外,没有方法访问
队列
<代码>静态提供变量内部链接,使其在翻译单元外部不可见。时段。

A.cpp
之外,没有方法访问
队列
<代码>静态提供变量内部链接,使其在翻译单元外部不可见。句号。

您不能直接从代码中访问此变量-没有允许此操作的“魔法语法”。不过,有一种方法可以解决这个问题——您可以使用编译器生成的调试信息。通过使用它,您应该能够像调试器一样访问该变量。经过快速的谷歌搜索,我找到了。您可以尝试使用它来访问该变量,或者至少作为如何加载和使用调试信息的示例。

您不能直接从代码访问该变量-没有“魔法语法”允许这样做。不过,有一种方法可以解决这个问题——您可以使用编译器生成的调试信息。通过使用它,您应该能够像调试器一样访问该变量。经过快速的谷歌搜索,我找到了。您可以尝试使用它来访问该变量,或者至少作为如何加载和使用调试信息的示例。

使用
static
意味着
queue
在其他翻译单元中不可见。这就是使用关键词的全部意义。你的目标类似于:“我有一个秘密银行账户。我不想让任何人知道,但我希望一些人能够把钱放进去。”如果你能接受改变
a.h,a.cpp
。。。然后您可以始终使用函数
B&getQueue(){return*queue;}
,该函数在
A.cpp
中定义,并在
A_priviliged.h
中声明。但实际上,你应该问问自己是如何陷入这种情况的。其他人写了这段代码,也许他希望队列只启动一次,并且代码包已经分发到了所有地方。我正在添加重置整个上下文的功能。然后我悲哀地发现,整个上下文都包含队列,这对我来说是一个大问题。静态队列只在类b中可用。队列被分配给b类中的下一个队列。因此,如果您需要queue的值,您应该首先启动db,然后使用b.next或是b->next来检索它。使用
static
意味着
queue
在其他翻译单元中不可见。这就是使用关键词的全部意义。你的目标类似于:“我有一个秘密银行账户。我不想让任何人知道,但我希望一些人能够把钱放进去。”如果你能接受改变
a.h,a.cpp
。。。然后您可以始终使用函数
B&getQueue(){return*queue;}
,该函数在
A.cpp
中定义,并在
A_priviliged.h
中声明。但实际上,你应该问问自己是如何陷入这种情况的。其他人写了这段代码,也许他希望队列只启动一次,并且代码包已经分发到了所有地方。我正在添加重置整个上下文的功能。然后我悲哀地发现,整个上下文都包含队列,这对我来说是一个大问题。静态队列只在类b中可用。队列被分配给b类中的下一个队列。因此,如果您想要queue的值,您应该首先启动db,然后使用b.next或是b->next来检索它。也许我忽略了什么,但是创建一个返回指针引用的函数,然后在标头中导出该函数怎么样。然后,您可以滥用函数返回的引用是l值这一事实。并且可以指定l值。像这样:
B&getQueue(){return*queue;}
@Centril“在不更改A.h和A.cpp(这在问题中有规定)的情况下”您将如何做到这一点?哦,我错过了问题的那一部分。。。谢谢你把我从尴尬的回答中解救出来;)对于那些感兴趣的人,这里是关于l值的内容://好的,我必须找到其他方法来解决这个问题。哈哈。非常感谢!也许我忽略了一些东西,但是创建一个返回指针引用的函数,然后在标题中导出该函数呢。然后,您可以滥用函数返回的引用是l值这一事实。并且可以指定l值。像这样:
B&getQueue(){return*queue;}
@Centril“在不更改A.h和A.cpp(这在问题中有规定)的情况下”您将如何做到这一点?哦,我错过了问题的那一部分。。。谢谢你把我从尴尬的回答中解救出来;)对于那些感兴趣的人,这里是关于l值的内容://好的,我必须找到其他方法来解决这个问题。哈哈。非常感谢!
class A
{
    static void append(int x);
}
class B;
static B *queue = 0;

class B
{
    friend class A;

    int value;
    B* next;

    B(int x)
    {
        value = x;
        next = queue;
        queue = this;
    }
}

void A::append(int x)
{
  new B(x);
}
#include "A.h"

<whatever magic declaration>

void C()
{
    queue = 0;
}