小编IAE*_*IAE的帖子

如何使用Qt5编程C++ 11?

我正准备和我的朋友一起编写跨平台项目.我们决定分别使用Qt和gcc作为我们的IDE和工具链.他在Linux上工作,我在Windows上工作.

但是,Linux上的gcc不一定是Windows上的gcc.更具体地说,Windows上的Qt使用gcc 4.4安装mingw,我的朋友有gcc 4.7.所以我尝试为Windows获取更新的gcc版本.

我目前的Qt版本是5,使用从本网站下载并安装的gcc 4.7:http://www.equation.com/servlet/equation.cmd? fa = fortran

我在C:\ QtSDK\mingw中安装它,并简单地覆盖了Qt安装中存在的所有文件.我想如果我只是采取短路线,我就不必在Qt中重新配置任何东西.

但是,即使使用编译器标志:

QMAKE_CXXFLAGS += -std=c++0x (Qt 4.7)
Run Code Online (Sandbox Code Playgroud)

CONFIG   += c++11 (Qt5)
Run Code Online (Sandbox Code Playgroud)

IDE或工具链无法编译简单的基于范围的for循环:

int main(int argc, char *argv[])
{
    int my_array[5] = {1, 2, 3, 4, 5};
    for (auto x : my_array)
        std::cout << x << std::endl;

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

或初始化列表:

int main(int argc, char *argv[])
{
    QVector<int> testsData { 1, 2, 10, 42, 50, 123  };
    QStringList options = { QLatin1String("foo"), QLatin1String("bar")  };

    return 0;
} …
Run Code Online (Sandbox Code Playgroud)

c++ qt gcc cross-platform c++11

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

在本机Android应用程序中管理UnityPlayer生命周期的错误

我正在开发一个需要在活动中加载UnityPlayer实例的Android应用程序,使用以下论坛帖子中的代码作为指南:

http://forum.unity3d.com/threads/98315-Using-Uni​​ty-Android-In-a-Sub-View.

最初,应用程序在名为"UnityActivity.java"的活动中正确显示UnityPlayer.

当用户导航回MainActivity(通过按下硬件后退按钮或单击ActionBar后退按钮)然后尝试重新打开UnityActivity时会出现问题 - 在这种情况下会显示黑屏而不是UnityPlayer.论坛中的用户建议将onPause和onResume生命周期事件转发给UnityPlayer,如下面的代码所示.但是,在执行此操作时,会显示以下错误并且应用程序崩溃.

首次导航到UnityActivity时会记录此信息:

W/libc(21095): pthread_create sched_setscheduler call failed: Operation not permitted

单击后退按钮时会记录此错误:

W/Choreographer(20963): Already have a pending vsync event. There should only be one at a time.

第二次导航到UnityActivity时会记录此错误:

A/libc(21095): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 21176 (Thread-5073)

......此时我被踢出了申请表.

这是主要活动的摘录MainActivity.java:

public void startUnityActivity(View view) {
        Intent intent = new Intent(this, UnityActivity.class);
    startActivity(intent);
}
Run Code Online (Sandbox Code Playgroud)

这是Unity活动的摘录UnityActivity.java:

public class UnityActivity extends ActionBarActivity {
    UnityPlayer m_UnityPlayer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); …
Run Code Online (Sandbox Code Playgroud)

android unity-game-engine android-activity

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

如何使用Argv编写基于范围的For循环?

来自c ++ 0x维基百科网站:

int my_array[5] = {1, 2, 3, 4, 5};
for (int &x : my_array) {
    x *= 2;
}
Run Code Online (Sandbox Code Playgroud)

那么为什么这段代码不起作用呢?

int main(int argc, char* argv[])
{
    for (char *arg : argv)
    {
        // Do something.
    }
}
Run Code Online (Sandbox Code Playgroud)

错误:

main.cpp:36: error: no matching function for call to ‘begin(char**&)’
Run Code Online (Sandbox Code Playgroud)

我在Ubuntu 11.10上使用Qt和g ++ 4.6.1.

附加信息

C++ 0x中是否有范围类

基于范围的For-Loop语句定义冗余

c++ for-loop c++11

15
推荐指数
4
解决办法
6213
查看次数

JavaFX中的MVC模式与Scene Builder

我是JavaFX的新手,在我目前的设置下,我正在努力创建一个合适的MVC架构.我使用Scene Builder将UI单击在一起,并指定了一个Controller类.

启动:

public class Portal extends Application {
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("PortalUI.fxml"));

        stage.setTitle("Portal");
        stage.setScene(new Scene(root));
        stage.show();
    }
}
Run Code Online (Sandbox Code Playgroud)

Controller类包含其余代码.

public class AccommodationPortalView implements Initializable {
    @Override
    public void initialize(URL url, ResourceBundle resources) {
    // Work here.
    }
}
Run Code Online (Sandbox Code Playgroud)

我的教授要求我进一步分离这个申请的关注点和责任.Controller不仅可以管理状态并与后端通信,还可以更新View.

我的第一个回应是让Controller类成为View并为Controller和Model创建另外两个类.

但是,我对如何连接这些部件感到茫然.我永远不需要实例化View,因此没有可以传递给我的Controller的View实例.接下来,我试着让它们成为所有单例,只是让Controller在运行时获取它们,但这给了我一个错误.

public class Portal extends Application {
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage stage) throws Exception { …
Run Code Online (Sandbox Code Playgroud)

java architecture model-view-controller javafx

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

例外安全 - 何时,如何,为什么?

我只是一个初出茅庐的程序员,至少尝试编程而不是最好的情况.我一直在阅读Herb Sutter的"Exceptional C++",并且到目前为止已经完成了三次异常安全章节.然而,除了他提出的一个例子(一个堆栈),我不确定我应该在什么时候努力争取异常安全与速度以及何时这样做是非常愚蠢的.

例如,我目前的家庭作业项目是一个双重链接列表.由于我已经编写了其中的几个,我想花时间深入研究一些更深层次的概念,比如ES.

这是我的pop-front功能:

void List::pop_front()
{
    if(!head_)
        throw std::length_error("Pop front:  List is empty.\n");
    else
    {
        ListElem *temp = head_;
        head_          = head_->next;
        head_->prev    = 0;
        delete temp;
        --size_;
    }
}
Run Code Online (Sandbox Code Playgroud)

我有一些困境.

1)当列表失败时,我真的应该抛出错误吗?我不应该简单地做什么并返回而不是强迫列表的用户执行try {] catch(){}语句(这也很慢).

2)有多个错误类(加上我的老师要求我们在类中实现的ListException).自定义错误类对于这样的事情是否真的是必需的,并且是否有关于何时使用特定异常类的一般指导?(例如,范围,长度和边界都相似)

3)我知道我不应该更改程序状态,直到抛出异常的所有代码都完成.这就是我最后减小size_的原因.这个简单的例子真的有必要吗?我知道删除不能扔.分配给0时头_-> prev是否可能抛出?(头是第一个节点)

我的push_back函数:

void List::push_back(const T& data)
{
    if(!tail_)
    {
        tail_ = new ListElem(data, 0, 0);
        head_ = tail_;
    }
    else
    {
    tail_->next = new ListElem(data, 0, tail_);
    tail_ = tail_->next;
    }
    ++size_;
}
Run Code Online (Sandbox Code Playgroud)

1)我经常听到C++程序中的任何事情都会失败.测试ListElem的构造函数是否失败(或者在执行期间是tail_ new)是否现实?

2)是否有必要测试数据类型(目前很简单,typedef int T …

c++ exception exception-safe

10
推荐指数
3
解决办法
744
查看次数

如果我想制作吃豆人游戏?

我立即把它作为一个社区维基的东西.我不想在编程方面寻求帮助,或者甚至没有关于编程的具体问题,而是想要制作这样一个游戏所需的过程和资源.

简单地说:我和我的大学朋友决定给自己一个非常大的挑战来提高我们的编程技巧.在六个月的时间里,我们想要展示自己的吃豆人游戏.Pac-Man将像Ghosts一样被AI控制,并且在一系列尝试获胜后,Pac-Man的寿命最长.

这不像我们到目前为止所做的任何事情.对我来说,这里的目标不是创造一个完美的游戏,而是试图完成它,在这个过程中学习一大堆.即使我没有在时间完成,这是一个很好的可能性,我想至少尝试过这个.

所以我的问题是:我该如何开始自己准备?我已经开始使用矢量数学,矩阵,所有有趣的东西.我想要的平台是DirectX 9.0c; 那是可取的吗?请记住,这不仅仅是对这个项目的偏好,但我希望在图形开发方面有一些未来,所以我想选择一个对未来安全的平台.

至于游戏开发,我应该考虑什么?我之前从未做过真正的游戏,所以任何和所有建议中型项目的开发(如果这是一个中等规模的项目)都非常感谢.

我主要担心的是陷阱和失败者.

对不起,如果问题太模糊了.如果它不属于这里,那么我将删除它.否则,非常感谢任何和所有关于制作大型项目的建议.

c++ pacman

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

在变量初始化之前转到Goto导致编译错误

考虑一下这段代码(VS2008):

void WordManager::formatWords(std::string const& document)
{
    document_ = document;
    unsigned int currentLineNo = 1;

    size_t oldEndOfLine = 0;
    size_t endOfLine    = document_.find('\n');
    while(endOfLine != std::string::npos)
    {
        std::string line = document_.substr(oldEndOfLine, (endOfLine - oldEndOfLine));
        if(line.size() < 2)
        {
            oldEndOfLine = endOfLine + 1;
            endOfLine    = document_.find('\n', oldEndOfLine);
            continue;
        }

        std::vector<std::string> words = Utility::split(line);
        for(unsigned int i(0); i < words.size(); ++i)
        {
            if(words[i].size() < 2)
                continue;
            Utility::trim(words[i], WordManager::delims);
            Utility::normalize(words[i], WordManager::replace, WordManager::replaceWith);

            if(ruleOne(words[i]) && ruleTwo(words[i]))
            {
                std::set<Word>::iterator sWIter(words_.find(Word(words[i])));

                if(sWIter == words_.end())
                    words_.insert(Word(words[i])).first->addLineNo(currentLineNo);
                else …
Run Code Online (Sandbox Code Playgroud)

c++ goto

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

如何确定STDIN是否为空?

我正在为我的操作系统课程编写模拟器.我遇到的问题是我们需要从STDIN获取所有.job文件(它们就像应用程序被送到模拟器)并读取它们.

呼叫:

./RMMIX < aJob.job
Run Code Online (Sandbox Code Playgroud)

我只是啜饮它

while(getline(std::cin, line)) 
Run Code Online (Sandbox Code Playgroud)

逐行.问题是,如果我没有给STDIN任何东西,那么cin会等待用户输入 - 不是我想要的.我需要程序识别STDIN上缺少文本并终止,而不是等待用户输入.

我已经确定我可以像这样查询长度:

size_t beg = std::cin.tellg();
std::cin.seekg(0, std::ios_base::end);
size_t end = std::cin.tellg();
std::cin.seekg(0, std::ios_base::beg);
Run Code Online (Sandbox Code Playgroud)

如果std :: cin的长度为0,则终止.

还有其他解决方案吗?这是便携式解决方案吗?

c++ iostream

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

使用Jersey的AbstractHttpContextInjectable自定义方法注释不工作

如果以非安全的方式访问某些方法,我想限制它们.我正在创建一个@Secure注释,用于检查请求是否是通过安全通道发送的.但是,我无法创建捕获请求的HttpContext的方法injectable.

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Secure {

}

public class SecureProvider<T> implements InjectableProvider<Secure, AbstractResourceMethod> {
    @Override
    public ComponentScope getScope() {
        return ComponentScope.PerRequest;
    }

    @Override
    public Injectable<?> getInjectable(ComponentContext componentContext,
                                       Secure annotation,
                                       AbstractResourceMethod method) {
        return new SecureInjectable();
    }
}

public class SecureInjectable<T> extends AbstractHttpContextInjectable<T> {
    @Override
    public T getValue(HttpContext context) {    
        // validation here

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

我正在使用Dropwizard框架,因此提供程序的初始化应该像以下一样简单:

environment.addProvider(new SessionRestrictedToProvider<>(new SessionAuthenticator(), "MySession"));
environment.addProvider(new SecureProvider<>());
environment.setSessionHandler(new SessionHandler());
Run Code Online (Sandbox Code Playgroud)

用法:

@Resource
@Path("/account")
public class AccountResource {
    @GET
    @Path("/test_secure")
    @Secure
    public Response isSecure() …
Run Code Online (Sandbox Code Playgroud)

java annotations jersey dropwizard

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

Fstream无法创建新文件

我正在使用FileManager进行项目,这样我的阅读和写作就不那么麻烦了.或者,如果我没有花费所有这些时间调试它.所以,这种舒适的课程实际上给我带来了压力和时间.真棒.

问题似乎是fstream.在继续之前,这是我的FileManager类的结构.

class FileManager : Utility::Uncopyable
{
public:
    FileManager();

    void open(std::string const& filename);
    void close();

    void read(std::string& buffer);
    void write(std::string const& data);

private:
    std::fstream stream_;
};
Run Code Online (Sandbox Code Playgroud)

非常简单.缓冲区在读取功能期间加载数据,数据参数是要写入文件的内容.在阅读和写作之前,你必须打开文件,否则就有可能在你脸上出现一个很大的例外.有点像我现在得到的那个.

场景:简单命令行注册用户,然后将数据写入文件.我要一个名字和密码.该名称将被复制并附加.txt(文件名).所以它看起来像这样:

void SessionManager::writeToFile(std::string const& name, 
                                 std::string const& password)
{
    std::string filename = name + ".txt";
    std::string data;
    data += name +", " +password;

    try
    {
        fileManager_->open(filename);
        fileManager_->write(data);
        fileManager_->close();
    } 
    catch(FileException& exception)
    {
        /* Clean it up. */
        std::cerr << exception.what() << "\n";
        throw;
    }
}
Run Code Online (Sandbox Code Playgroud)

问题:打开失败.永远不会创建该文件,并且在写入期间我因没有打开文件而获得异常.

FileManager :: open()函数:

void FileManager::open(std::string …
Run Code Online (Sandbox Code Playgroud)

c++ file-io file

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