小编bre*_*ert的帖子

Brace封闭的初始化列表构造函数

我有类Phenotype与以下构造函数:

Phenotype(uint8 init[NUM_ITEMS]);
Run Code Online (Sandbox Code Playgroud)

我可以像这样创建一个Phenotype:

uint8 data[] = {0,0,0,0,0};
Phenotype p(data);
Run Code Online (Sandbox Code Playgroud)

但是当我尝试创建这样的一个时,我收到一个错误:

Phenotype p = {0,0,0,0,0};
Run Code Online (Sandbox Code Playgroud)

输出:

$ make
g++ -Wall -g main.cpp -std=c++0x
main.cpp: In function ‘int main(int, char**)’:
main.cpp:109: error: no matching function for call to ‘Phenotype::Phenotype(<brace-enclosed initializer list>)’
main.cpp:37: note: candidates are: Phenotype::Phenotype(uint8*)
Run Code Online (Sandbox Code Playgroud)

该错误似乎表明有一种方法可以定义一个构造函数,该构造函数采用括号括起的初始化列表.有谁知道如何做到这一点?

c++ initializer-list c++11

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

其他声明似乎被忽略了

void PacketRecord::determineAppProtocol()
{
    if (ipProtocol == IP_PROTO_UDP)
    {
        std::istringstream ss(udpData);

        std::string line;
        if (getline(ss, line) && (line.find("SIP/2.0") != std::string::npos))
        {
            appProtocol = APP_PROTO_SIP;
        }
        else
        {
            appProtocol == APP_PROTO_RTP;
        }
    }
    else
    {
        appProtocol = APP_PROTO_UNKNOWN;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果内部if语句无法计算为true,我希望执行else块(appProtocol设置为APP_PROTO_RTP).但是,这不会发生.相反,似乎else语句完全被忽略了.我无法理解为什么会这样.

从我的gdb会话中可以看到,if语句第一次工作,appProtocol设置为APP_PROTO_SIP(如预期的那样).第二次,if失败但不是进入else并将appProtocol设置为APP_PROTO_RTP,它完全退出函数而不设置appProtocol.appProtocol保持设置为APP_PROTO_INVALID(它在PacketRecord ctor中初始化的值).

Breakpoint 1, PacketRecord::determineAppProtocol (this=0x805c6c8) at PacketRecord.cpp:156
156     if (ipProtocol == IP_PROTO_UDP)
(gdb) step
158         std::istringstream ss(udpData);
(gdb) 
159         std::string line;
(gdb) 
160         if (getline(ss, line) && (line.find("SIP/2.0") != std::string::npos))
(gdb) 
162             appProtocol = APP_PROTO_SIP;
(gdb) 
167         }
(gdb) 
173 …
Run Code Online (Sandbox Code Playgroud)

c++ if-statement

9
推荐指数
2
解决办法
856
查看次数

T :: iterator出错,其中模板参数T可能是vector <int>或list <int>

我正在尝试编写一个函数来打印常见STL容器(向量,列表等)的表示.我给函数一个模板参数T,例如,它可能代表向量.我在获取类型为T的迭代器时遇到问题

vector<int> v(10, 0);
repr< vector<int> >(v);
Run Code Online (Sandbox Code Playgroud)

...

template <typename T>
void repr(const T & v)
{
    cout << "[";
    if (!v.empty())
    {
        cout << ' ';
        T::iterator i;
        for (i = v.begin(); 
             i != v.end()-1;
             ++i)
        {
            cout << *i << ", ";
        }
        cout << *(++i) << ' ';
    }
    cout << "]\n";
}
Run Code Online (Sandbox Code Playgroud)

...

brett@brett-laptop:~/Desktop/stl$ g++ -Wall main.cpp
main.cpp: In function ‘void repr(const T&)’:
main.cpp:13: error: expected ‘;’ before ‘i’
main.cpp:14: error: ‘i’ was not declared in …
Run Code Online (Sandbox Code Playgroud)

c++ templates stl repr

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

使用javac编译Java程序成功,但运行时出现NoClassDefFoundError

class HelloWorld
{ 
    public static void main(String[] args) 
    { 
        System.out.println("hey");
    } 
}
Run Code Online (Sandbox Code Playgroud)

命令提示符会话:

C:\Users\zobdos\Desktop>javac HelloWorld.java

C:\Users\zobdos\Desktop>dir *.class
 Volume in drive C is OS
 Volume Serial Number is A45E-7B01

 Directory of C:\Users\zobdos\Desktop

11/20/2010  10:16 AM               417 HelloWorld.class
               1 File(s)            417 bytes
               0 Dir(s)   8,145,432,576 bytes free

C:\Users\zobdos\Desktop>java HelloWorld
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld
Caused by: java.lang.ClassNotFoundException: HelloWorld
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Could not …
Run Code Online (Sandbox Code Playgroud)

java javac

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

Pylons - 如何获得当前的控制器和动作(当前路线)?

我在Mako模板中,我想知道当前控制器和操作是什么(当前页面).我怎样才能做到这一点?我试过c.controller和c.action,但它没有用.我还列出了上下文对象的键,但没有找到它.

作为一种解决方法,我一直在每个控制器方法中设置c.controller和c.action,但我知道必须有更好的方法.

class MainController(BaseController):

    def index(self):
        c.controller, c.action = 'main', 'index'
        return render("/main.html")
Run Code Online (Sandbox Code Playgroud)

python pylons

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

未定义的引用

链接器错误:

$ make
g++ -Wall -g main.cpp SDL_Helpers.cpp Game.cpp DrawableObject.cpp `sdl-config --cflags --libs` -lSDL_mixer
/tmp/ccdxzrej.o: In function `Game':
/home/brett/Desktop/SDL/Game.cpp:16: undefined reference to `Player::Player(Game*)'
/home/brett/Desktop/SDL/Game.cpp:16: undefined reference to `Player::Player(Game*)'
collect2: ld returned 1 exit status
make: *** [all] Error 1
Run Code Online (Sandbox Code Playgroud)

main.cpp中:

#include "Game.h"

int main()
{
    Game g;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Game.h:

#ifndef BRETT_GAME_H
#define BRETT_GAME_H

#include <cmath>
#include "SDL.h"
#include "SDL_Helpers.h"
#include <vector>

class DrawableObject;

class Game
{
public:
    SDL_Surface * screen;
    std::vector<DrawableObject*> sprites;

    Game();
};

#endif
Run Code Online (Sandbox Code Playgroud)

Game.cpp:

#include "Game.h" …
Run Code Online (Sandbox Code Playgroud)

c++ linker undefined-reference

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

ISO C++禁止声明'游戏'没有类型 - 可能包括问题?

编译输出:

g++ -Wall -g main.cpp `sdl-config --cflags --libs` -lSDL_mixer
In file included from Game.h:8,
                 from main.cpp:1:
DrawableObject.h:11: error: ISO C++ forbids declaration of ‘Game’ with no type
DrawableObject.h:11: error: expected ‘;’ before ‘*’ token
DrawableObject.h:13: error: expected ‘)’ before ‘*’ token
main.cpp:7: error: expected ‘}’ at end of input
main.cpp:7: error: expected unqualified-id at end of input
make: *** [all] Error 1
brett@brett-laptop:~/Desktop/SDL$ make
g++ -Wall -g main.cpp `sdl-config --cflags --libs` -lSDL_mixer
In file included from Game.h:8,
                 from main.cpp:1:
DrawableObject.h:11: …
Run Code Online (Sandbox Code Playgroud)

c++ sdl

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