相关疑难解决方法(0)

对静态成员进行未定义的引用意味着什么?

我刚刚写了一个包含一些静态数据成员的类,但现在我收到有关"未定义引用"的错误.为什么这不起作用?我究竟做错了什么?

(注意:这是Stack Overflow的C++常见问题解答的一个条目.如果你想批评在这种形式下提供常见问题解答的想法,那么发布所有这些的元数据的发布将是这样做的地方.这个问题在C++聊天室中受到监控,其中FAQ的想法一开始就出现了,所以你的答案很可能被那些提出想法的人阅读.)

c++ c++-faq

18
推荐指数
2
解决办法
8779
查看次数

C++中声明和变量定义之间有什么区别?

我的问题源于Scott Meyers 研究Effective C++.在该书的第二项中,写下如下:

要将常量的范围限制为类,必须使其成为成员,并且为了确保最多只有一个常量副本,必须使其成为静态成员.

这是正确的写.然后立即给出以下示例:

class GamePlayer {
private:
    static const int NumTurns = 5;
    int scores[NumTurns];
    ....
  };
Run Code Online (Sandbox Code Playgroud)

然后写下以下示例:

你在上面看到的是一个声明,而不是NumTurns的定义.

我的第一个问题是:这个陈述的含义是什么?

紧接着提到以下内容:

通常C++要求您为所使用的任何内容提供定义,但是静态和整数类型的类特定常量(例如 - 整数,字符,bools)是一个例外.只要您不接受他们的地址,您就可以声明它们并在不提供定义的情况下使用它们.如果您确实将类的地址设为常量,或者即使您没有使用该地址,您的编译器也错误地坚持定义,您提供了一个单独的定义,如下所示: const int GamePlayer::Numturns; //definition of NumTurns

为什么现在它是一个定义而不是声明?

我理解函数上下文中的差异,但在常规变量的上下文中不理解它.此外,有人可以扩展作者的意思

...如果你确实把一个类的地址定为常数,或者如果你的......部分引用了上面引用的段落?

PS:我是C++的新手.

c++

18
推荐指数
2
解决办法
1649
查看次数

不允许在swift类中使用Objective C头文件中定义的Constant.架构armv7的未定义符号

我创建了Objective C Header文件.并在其中添加了一些属性.

static NSString* const kColor005C98 = @"005C98";Constants.h档案中 宣布

我在Bridging-Header文件中将此文件定义为#import "Constants.h" 现在,当我想kColor005C98在某个swift文件中使用此属性时,它失败了构建,我得到了

架构armv7的未定义符号:"_kColor005C98",引自:

我不知道我还需要做什么,所以我没有得到这个错误?(我已成功在其他目标C文件中使用此属性,在这种情况下没有问题)

objective-c arm7 swift

14
推荐指数
1
解决办法
3482
查看次数

究竟什么是C++定义,声明和赋值?

我倾向于使用单词define,declare和assign可互换,但这似乎会导致一些人的冒犯.这是否合理?我是否应该仅在第一次使用"声明"一词时分配给变量?或者还有更多呢?

c++ terminology variable-assignment declare

13
推荐指数
4
解决办法
5010
查看次数

如何声明其类没有默认构造函数的对象数组?

如果一个类只有一个带有一个参数的构造函数,那么如何声明一个数组呢?我知道在这种情况下推荐使用矢量.例如,如果我有一个班级

class Foo{

public:
Foo(int i) {}

}
Run Code Online (Sandbox Code Playgroud)

如何声明包含10000个Foo对象的数组或向量?

c++ arrays

13
推荐指数
3
解决办法
1万
查看次数

C++中的:: mean是什么意思?

void weight_data::rev_seq(string &seq){ 
//TODO
std::reverse(seq.begin(), seq.end());
}
Run Code Online (Sandbox Code Playgroud)

在这个C++的方法,我觉得这个方法不返回任何东西,所以前缀void,这是什么::告诉之间的关系weight_datarev_seq(string &seq)?谢谢!

c++ methods

13
推荐指数
2
解决办法
3861
查看次数

"非虚拟thunk到<方法名称>",引自:<objectfile>中的<classname>的Vtable>

在调试模式下编译时,我的xcode编译有以下链接错误:

"<method name>", referenced from: 
Vtable for <classname>in <objectfile.o>

"non-virtual thunk to <method name>", referenced from: 
Vtable for <classname>in <objectfile.o>
Run Code Online (Sandbox Code Playgroud)

奇怪的是:它只发生在我的一个构建目标中(两个目标对于该代码几乎相同),如果这些方法在头文件中定义而不是.cpp,则它对两个目标都可以正常工作.

所有这些方法都是纯虚拟的.发生这些错误的类继承自多个类,但只有其中一个会导致这些错误.

任何人都知道导致此错误的原因是什么?

c++ xcode linker

13
推荐指数
2
解决办法
2万
查看次数

为什么空声明适用于带有int参数的定义但不适用于浮点参数?

我认为区别在于declaration没有参数类型......

为什么这样做:

int fuc();

int fuc(int i) {
  printf("%d", i);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

但这无法编译:

int fuc();

int fuc(float f) {
  printf("%f", f);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

随着消息:

错误:'fuc'的冲突类型.注意:具有默认促销的参数类型不能与空参数名称列表声明匹配

c function-prototypes function-declaration

12
推荐指数
1
解决办法
1万
查看次数

类声明或定义中的静态变量?

我是C++的新手.
我有一个这样的课:

class CodeTest
{
private:
    static const int TOTAL=100;
};
Run Code Online (Sandbox Code Playgroud)

TOTAL一个声明定义

当我阅读Scott Meyer的书时,有人提到在实现文件中我们需要定义如下内容:

const int CodeTest::TOTAL;
Run Code Online (Sandbox Code Playgroud)

为什么需要这个?

c++ static-members

12
推荐指数
1
解决办法
6988
查看次数

什么是c ++中的前向声明?

这个答案说:

......最后,

typedef struct { ... } Foo;
Run Code Online (Sandbox Code Playgroud)

声明一个匿名结构并为其创建一个typedef.因此,使用此构造,它在标记名称空间中没有名称,只有typedef名称空间中的名称.这意味着它也无法向前宣布.如果要进行前向声明,则必须在标记名称空间中为其指定名称.

什么是前瞻性声明?

c++ forward-declaration

10
推荐指数
2
解决办法
2万
查看次数