小编Spe*_*eed的帖子

如何使用std :: find/std :: find_if与自定义类对象的向量?

我有一个代表一个被调用的用户的类Nick,我想std::find_if在其上使用,我想要查找用户列表向量是否包含我传入的相同用户名的对象.我尝试创建一个新Nick对象尝试了几次我要测试和重载的用户名== operator,然后尝试find/find_if在对象上使用:

    std::vector<Nick> userlist;
    std::string username = "Nicholas";

if (std::find(userlist.begin(), userlist.end(), new Nick(username, false)) != userlist.end())) {
    std::cout << "found";
}
Run Code Online (Sandbox Code Playgroud)

我已经超载了== operator所以比较Nick == Nick2应该工作,但函数返回error C2678: binary '==' : no operator found which takes a left-hand operand of type 'Nick' (or there is no acceptable conversion).

这是我的Nick课程供参考:

class Nick {
private:
    Nick() {
        username = interest = email = "";
                    is_op = false;
    };
public:
    std::string …
Run Code Online (Sandbox Code Playgroud)

c++ stl stl-algorithm

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

如何在Visual Studio 2010中使用tr1(tr1 :: function)?

如何开始使用Visual Studio 2010的tr1功能?对于更具体的情况,我需要std :: tr1 :: function.我尝试将#include <tr1/functional>哪些报告#include <functional>包含在内,但包括罚款,但是当我设置这个时:

std::tr1::function<void(void)> callback;
Run Code Online (Sandbox Code Playgroud)

我明白了:

1>d:\marmalade\projects\core\src\button.h(21): error C3083: 'tr1': the symbol to the left of a '::' must be a type
1>d:\marmalade\projects\core\src\button.h(21): error C2039: 'function' : is not a member of '_STL'
1>d:\marmalade\projects\core\src\button.h(21): error C2143: syntax error : missing ';' before '<'
1>d:\marmalade\projects\core\src\button.h(21): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:\marmalade\projects\core\src\button.h(21): error C2238: unexpected token(s) preceding ';'
Run Code Online (Sandbox Code Playgroud)

如果我使用boost,它工作正常,但对于这个项目,由于使用特定的框架,我需要Visual Studio tr1版本.

正如所建议的那样,跳过tr1仍会返回相同的结果:

std::function<void(void)> …
Run Code Online (Sandbox Code Playgroud)

c++ tr1 std visual-studio-2010 c++11

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

SDL TextInput(使用新的1.3结构)

好的,我一直在研究 SDL 中的文本输入(如何将击键数据转换为字母并将它们附加到名为 Text 的 std::string 中),并且大多数教程都以这种方式进行了介绍:

//If a key was pressed
if(event->type == SDL_KEYDOWN )
{
        //If the key is a lowercase letter
        else if( (event->key.keysym.unicode >= (Uint16)'a' ) && (event->key.keysym.unicode <= (Uint16)'z' ) )
        {
            //Append the character
            Text += (char)event->key.keysym.unicode;
        }
}
Run Code Online (Sandbox Code Playgroud)

然而,经过一番搜索后,我在 SDL 标头中发现了一条注释,指出 .unicode 已弃用并使用SDL_TextInputEvent/SDL_TextEditingEvent。SDL 文档 wiki 中有一些关于它的参考,但是我找不到任何有关如何使用它的示例。例如,我将如何使用新结构编写上面的代码片段?

c++ textbox sdl textinput

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

Ruby String #unpack

我有一个3个字符串的打包字符串,它以一种方式组成,以便我有一个整数,指定下一个项目的字节长度,然后指定该项目的字节,然后是下一个项目的字节大小等,就好像有人这样做:

[a.bytesize, a, b.bytesize, b, c.bytesize, c].pack("na*na*na*")
Run Code Online (Sandbox Code Playgroud)

如何以简单的方式正确解压缩?Perl解决这个问题的方法是:

my($a, $b, $c) = unpack("(n/a*)3", $data)
Run Code Online (Sandbox Code Playgroud)

对于ruby,它显然不支持'/'和解包中的括号,我使用的是:

vals = []
3.times do
  size = data.unpack("n").first
  data.slice!(0, 2)
  vals << data.unpack("a#{size}").first
  data.slice!(0, size)
end
Run Code Online (Sandbox Code Playgroud)

有更简单的方法吗?

ruby unpack

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

用于将字符串从文件读取到3D数组的循环

我的一个功能有问题,我正在研究一个简单的平铺地图编辑器,我正在尝试实现一个3D数组来跟踪平铺(x,y,层).在此之前,我有一个1D数组,其中所有的瓷砖都是按顺序列出的:

bool Map::OnLoad(char* File) {
    TileList.clear();
    FILE* FileHandle = fopen(File, "r");
    if(FileHandle == NULL) {
        return false;
    }

    for(int Y = 0;Y < MAP_HEIGHT;Y++) {
        for(int X = 0;X < MAP_WIDTH;X++) {
            Tile tempTile;

            fscanf(FileHandle, "%d:%d ", &tempTile.TileID, &tempTile.TilePassage);

            TileList.push_back(tempTile);
        }
        fscanf(FileHandle, "\n");
    }
    fclose(FileHandle);
    return true;
}
Run Code Online (Sandbox Code Playgroud)

这基本上是从文件中读取的字符串,如下所示:

2:1 1:0 3:2...
Run Code Online (Sandbox Code Playgroud)

第一个数字表示tileID,第二个表示Tile可通过性.以上功能有效.我的3D数组也正确构建,我用简单的赋值测试它们并从中调用值.给我带来问题的函数如下(请注意,数字2即OnLoad2()已添加,因此我可以保持旧变量和函数不变,直到原型工作):

bool Map::OnLoad2(char* File) {
    TileList2.clear();
    FILE* FileHandle2 = fopen(File, "r");
    if(FileHandle2 == NULL) {
        return false;
    }

    for(int Y = 0;Y < MAP_HEIGHT;Y++) …
Run Code Online (Sandbox Code Playgroud)

c++ 3d for-loop sdl vector

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

如何正确缩短C++中的if语句?

好的,我有一个if句子,我多次比较一个特定的值.我打赌有一个更短的方法来做到这一点:

if(letter == "%" || letter == "+" || letter == "-" || letter == "!")
Run Code Online (Sandbox Code Playgroud)

我试着把它写成:

if(letter == "%" || "+" || "-" || "!")
Run Code Online (Sandbox Code Playgroud)

但它工作不正确.

c++ if-statement

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

gdb - 如何查看stdout使用的函数?

我有一个我正在尝试跟踪的OpenGL库错误,并且该错误会将类似C代码的内容打印到stdout中.这是程序,一旦glutMainLoop()调用就会发生错误,但我怀疑这不是那个错误的函数.我如何跟踪写入stdout的函数?

根据要求,输出:

arc_ccw_turn, p = 0
case b
arc_ccw_turn, p = 0
case d
arc_ccw_turn, p = 0
case a
arc_ccw_turn, p = 0
case c
Run Code Online (Sandbox Code Playgroud)

我已经报告了这个bug,但我也尝试为这个问题提供GDB回溯.

c++ gdb

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