相关疑难解决方法(0)

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

编译/链接过程如何工作?

编译和链接过程如何工作?

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

c++ compiler-construction linker c++-faq

395
推荐指数
6
解决办法
19万
查看次数

什么是外部联系和内部联系?

我想了解外部联系和内部联系及其区别.

我也想知道的意思

const默认情况下,变量内部链接,除非另有声明extern.

c++ c++-faq

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

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

C++中的一个定义规则究竟是什么?

C++中的一个定义规则究竟是什么意思?我能找到的唯一值得信赖的事件是在C++编程语言中,第3版.编辑,第9.2.3节.除了那个规则之外,该规则是否有官方定义?

c++ definition

38
推荐指数
1
解决办法
9184
查看次数

c ++成员函数访问私有静态变量?

可能重复:
对静态成员有未定义的引用是什么意思?

如果我在类声明之外实现函数,我不知道为什么我得到错误"未定义引用`TT :: i'"?这是代码..

class TT{
private:
    static int i;
public:
    void t();
};

void TT::t(){
    i=0;
}
Run Code Online (Sandbox Code Playgroud)

c++ static-members

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

从另一个类访问静态成员函数

我在 C++ 类中有一个静态 stl 映射,并且有另一个静态成员函数来返回指向映射中对象的常量指针。该映射对于该类中的所有对象都是通用的。

唯一的问题是,我需要搜索这个映射并从另一个类(位于不同的 .cpp/.h 文件中)设置它,当我尝试在 vs2010 中编译它们时,我得到了未解析的外部符号。这些方法在 Timestream 类中定义为

static void setRoomList(std::map<std::string, RoomDescription> rl);
static RoomDescription * getRoom(std::string ref); 
Run Code Online (Sandbox Code Playgroud)

这两个函数都是公共的,因此不应该存在访问问题。这些函数在 Timestream.cpp 文件中正常定义,即

RoomDescription * Timestream::getRoom(std::string ref)
{
    std::map<std::string, RoomDescription>::iterator cIter= roomList.find(ref);

    if(cIter!=roomList.end())
        return &(cIter->second);

    return NULL;
}
Run Code Online (Sandbox Code Playgroud)

我想这样称呼它

RoomDescription *r =Timestream::getRoom("Bathroom")
Run Code Online (Sandbox Code Playgroud)

来自其他班级。网络上的其他帖子似乎谈论使用 extern,但我对此不确定。我不明白为什么这与从不同类调用任何其他成员函数有什么不同?

谢谢,詹姆斯

编辑:是的,我已经声明了

std::map<std::string, RoomDescription> roomList;
Run Code Online (Sandbox Code Playgroud)

位于 Timestream.cpp 文件的顶部。在标头中它被定义为

static  std::map<std::string, RoomDescription> roomList;
Run Code Online (Sandbox Code Playgroud)

我已将 RoomDescription 的标头包含在我尝试从中调用这些方法的类的标头中。

我得到的错误是这样的

Import.obj :错误 LNK2019:无法解析的外部符号“public: static void __cdecl Timestream::setRoomList(class std::map,class std::allocator >,class RoomDescription,struct std::less,class std::allocator >> ,class std::allocator,class std::allocator > …

c++

5
推荐指数
1
解决办法
8235
查看次数

我们是否还需要单独定义静态成员,即使它们是在类定义中初始化的?

在C++ 03中,我们能够const static在类定义中内联初始化类数据成员,但是 如果要使用odr,仍然必须定义成员.

在C++ 11中仍然如此吗?

struct Foo
{
   static const int x = 3;
};

const int Foo::x;
// ^ required?
Run Code Online (Sandbox Code Playgroud)

c++ language-lawyer c++11

4
推荐指数
1
解决办法
319
查看次数

C++静态类成员 - 语法错误

我有这个代码:( BITMAPS是一个免费的名字)

class BITMAPS{
public:
    static ALLEGRO_BITMAP *cursor;

    static void load_bitmaps();
    static void unload_bitmaps();
};
Run Code Online (Sandbox Code Playgroud)

我试图像这样使用它:( 有错误的行)

line 9:   BITMAPS.load_bitmaps();
line 23:  BITMAPS.unload_bitmaps();
line 36:  BITMAPS.cursor;
Run Code Online (Sandbox Code Playgroud)

但我得到这样的错误 :( 错误)

line 9 and 23:    syntax error : missing ';' before '.'
line 36:          token '.' is illegal after UDT 'BITMAPS'
line 36:          'BITMAPS' : illegal use of this type as an expression
line 36:          left of '.cursor' must have class/struct/union
Run Code Online (Sandbox Code Playgroud)

问题是什么?

编辑:

我改变了.::现在我得到了这个: …

c++ static class syntax-error

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

c ++中的静态地图初始化

有许多类似的问题,实际上我从其他几个帖子中编写了以下代码.不幸的是,我仍然有一个错误,我似乎无法破解 - 虽然我做了很多15年前的c ++开发.

我想使用地图制作一个简单的静态查找表.

这是到目前为止的代码(代码css似乎不能很好地呈现它):

enum RegionCodeEnum
{
    One,
    Two,
    Three
};

enum DeviceCodeEnum
{
    AAA,
    BBB,
    CCC
};

class LookupTable
{
    friend class constructor;

    struct constructor 
    {
        constructor() 
        { 
            table[One] = AAA;
            table[Two] = AAA;
            table[Three] = CCC;
        }
    };

    static constructor cons;

public:
    LookupTable(void);

    static DeviceCodeEnum GetDeviceFromRegion(RegionCodeEnum RegionCode);

private:
    static map<RegionCodeEnum, DeviceCodeEnum> table;
};

LookupTable::constructor LookupTable::cons;

LookupTable::LookupTable(void)
{

}

DeviceCodeEnum LookupTable::GetDeviceFromRegion(RegionCodeEnum RegionCode)
{
    return table[RegionCode];
}
Run Code Online (Sandbox Code Playgroud)

从其他地方代码我有这个代码:

DeviceCodeEnum code= LookupTable::GetDeviceFromRegion(One);
Run Code Online (Sandbox Code Playgroud)

我得到的编译错误是:

error LNK2001: unresolved external symbol "private: …
Run Code Online (Sandbox Code Playgroud)

c++ static initialization map

0
推荐指数
1
解决办法
1381
查看次数

C++中对"类成员"的"未定义"引用

在链接此代码时:

#include <map>
using std::map;
#include <string>
using std::string;
class C {
public:
    static void dump() {
        for (const auto& e : data) {
            string(e.first);
        }
    }
private:
    static map<string,map<string,string>> data;
};
int main() {
    C::dump();
}
Run Code Online (Sandbox Code Playgroud)

...我收到此错误:

/tmp/cc4W2iNa.o: In function `C::dump()':
test.cpp:(.text._ZN1C4dumpEv[_ZN1C4dumpEv]+0x9): undefined reference to `C::data'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

......来自g ++(GCC)4.9.1.我做错了吗?

c++ oop linker gcc

0
推荐指数
1
解决办法
1044
查看次数