相关疑难解决方法(0)

如何以特定模式读取C++中的一行并将其存储在字符串中?

我想读取类似这样的txt文件的每一行

1190/2132 123/23123 45

我想读取整行,然后将它们存储在三个单独的字符串中,以备将来用于构建树.我现在正在使用fgets,但是在将它放入字符串时遇到错误.我该怎么办?

c++

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

C++宏 - 大写字符串

我正在使用预处理器宏来声明一些重复变量,具体来说:

QuitCallbackType quitCallback;
LossCallbackType lossCallback;
PauseCallbackType pauseCallback;
KeyCallbackType keyCallback;
MouseCallbackType mouseCallback;
Run Code Online (Sandbox Code Playgroud)

我想使用预处理器宏来实现它,la


CREATE_CALLBACK_STORAGE(quit)
CREATE_CALLBACK_STORAGE(loss)
CREATE_CALLBACK_STORAGE(pause)
CREATE_CALLBACK_STORAGE(key)
CREATE_CALLBACK_STORAGE(mouse)
Run Code Online (Sandbox Code Playgroud)

它本质上是这样的:

#define CREATE_CALLBACK_STORAGE(x) capitalize(x)##CallbackType x##CallBack;
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点,所以我不必传递每个名称​​的大写和小写版本?

我意识到使用宏的打字并不多,但问题本身开始引起我的兴趣.

c++ macros

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

如何检查是否可以使用__PRETTY_FUNCTION__?

...../PluginLoader.h:34: multiple definition of 'Dummy_Func_For_Generating_FUNCTION_NAME_Macro()'

以下代码输出上述错误.我在我的档案中加入了警卫.其他一切都很好.

编辑:我想要实现的是检查是否__PRETTY_FUNCTION__已定义,如果是,请稍后在FUNCTION_NAME宏代码中使用它(用于记录目的).如果__PRETTY_FUNCTION__没有定义,请使用下一个最好的东西,依此类推.然而,我得到的回应让我意识到这是不可能的.那么,如果__PRETTY_FUNCTION__和所有这些不是宏,那么它们是什么?我如何检查某个实现是否有其中一个?

    void Dummy_Func_For_Generating_FUNCTION_NAME_Macro()
    {
#ifndef FUNCTION_NAME
    #ifdef __PRETTY_FUNCTION__
        #define FUNCTION_NAME __PRETTY_FUNCTION__
    #elif __FUNCTION__
        #define FUNCTION_NAME __FUNCTION__
    #elif __func__
        #define FUNCTION_NAME __func__
    #else
        #define FUNCTION_NAME ""
    #endif
#endif
    }
Run Code Online (Sandbox Code Playgroud)

c++ macros c-preprocessor

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

递归嵌套模板 - gcc bug?

我有以下代码段.

template< typename T >
struct f
{
  template< typename V >
  struct a : f
  {};
};

int main ()
{
  f<int>::a<int>::a<double> x;
}
Run Code Online (Sandbox Code Playgroud)

它在GCC 4.4.5以及MSVC 2010上没有警告编译,但在GCC 4.5.2上没有 - 我得到以下错误:

test.cc: In function 'int main()':
test.cc:11:21: error: expected primary-expression before 'double'
test.cc:11:21: error: expected ';' before 'double'
Run Code Online (Sandbox Code Playgroud)

因此,虽然我没有看到任何关于它的非标准问题,但问题是强制性的 - 这在C++中是否合法?此外,如果是,我如何在GCC提交错误报告?(:

编辑:好奇的一点背景:

这应该是一块模板元编程.f基本上具有apply替换的模板元函数类的结构a(当然嵌套typeapply被省略,所以我们可以专注于结构本身).

在这种情况下,继承是用于绑定元函数返回值的标准设备.这个代码片段试图实现的是一个元函数类,在计算时递归地自我产生.

edit2:让我有点不同的相同片段:

template< typename T >
struct f
{
  template< typename V > struct a; …
Run Code Online (Sandbox Code Playgroud)

c++ gcc templates

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

使用 back_inserter() 或 inserter() 提高 std::copy() 的效率

back_inserter非常insert_iterator方便,但效率也很低!

例如,当您追加chars 时,每个元素都会产生大量开销copy,而在许多情况下,实际上并不需要如此。

有没有办法让他们更有效率?

c++ inserter

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

排序中的<运算符断言无效

我正在尝试实现一个简单的比较器,用于根据数组"_vec"中的值对索引进行排序.我收到"无效<运营商"运行时错误消息.我无法理解以下代码有什么问题:

class Compare{
vector<int>& _vec;
public:
    Compare(vector<int>& vec) : _vec(vec) {}
    bool operator()(size_t i, size_t j){
        if(_vec[i] != _vec[j])
        return _vec[i] < _vec[j];
        else
        return (double)rand()/RAND_MAX < 0.5; 
    }
};
Run Code Online (Sandbox Code Playgroud)

我正在使用以下函数调用:

sort(inds.begin(),inds.end(),Compare(vals));
Run Code Online (Sandbox Code Playgroud)

其中inds只是一个包含索引从1到15(比如说)的数组,而vals是长度为15的数组,其中包含一些我希望计算其排序索引的值.总体目标是在val中的两个(或更多)条目相等时随机化排序顺序.有帮助吗?

c++ sorting assertion operator-keyword

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

找出2条线是否相交

可能重复:
如何检测两个线段相交的位置?
确定两个线段是否相交?

给定两条线l1 =((A0,B0),(A1,B1))和l2 =((A2,B2),(A3,B3)); Ax,Bx是整数,(Ax,Bx)指定行的开始和结束.

是否存在仅使用整数运算来确定l1和l2是否相交的算法?(只需要一个布尔答案.)

我自己的方法是用定点算术计算交点附近的点.然后用以下等式代替解(a,b):

I:abs((A0 + a*(A1-A0)) - (A2 + b*(A3-A2)))<公差
II:abs((B0 + a*(B1-B0)) - (B2 + b*(B3-B2)))<公差

如果I和II都评估为true,我的方法应该返回true.

我的C++ - 代码:
vec.h:

#ifndef __MY_VECTOR__
#define __MY_VECTOR__
#include <stdarg.h>
template<typename VType, unsigned int dim>
class vec {
private:
    VType data[dim];
public:
    vec(){}
    vec(VType v0, ...){
            data[0] = v0;
            va_list l;
            va_start(l, v0);
            for(unsigned int i=1; i<dim; ++i){
                    data[i] = va_arg(l, VType);
            }
            va_end(l);
    }
    ~vec(){}
    VType& operator[](unsigned int i){
            return data[i];
    }
    VType …
Run Code Online (Sandbox Code Playgroud)

c++ geometry linear-algebra

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

为什么在函数_wtoi中wtoi之前有一个下划线,其中ansi版本是atoi?

你好!很长一段时间我很困惑!

很久很久以前,只有ansi版本就是atoi.

现在(很久以前)也有很多char版本.

但为什么宽字符版本在wtoi之前有一个uderline('_')?

谁能告诉我为什么?谢谢 :)

wchar visual-c++

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

为什么要尝试两次找到析构函数?

我正在尝试以下代码:

GeneralTemplate.h

#ifndef _GENERATEMPLATE_H_
#define _GENERATEMPLATE_H_

#include <iostream>

template <class T>
class GeneralTemplate
{
  public:
  GeneralTemplate();
  GeneralTemplate(const GeneralTemplate &g);

  ~GeneralTemplate();

  GeneralTemplate& operator= (GeneralTemplate const& g);

  template <class M>
  void arbitraryFunction(const M &m);
};

#endif
Run Code Online (Sandbox Code Playgroud)

main.cpp中

#include "GeneralTemplate.h"

#include <iostream>

int main()
{
    GeneralTemplate<int> gInt;
    gInt.arbitraryFunction(2.3);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

请注意,我没有任何类模板的成员函数的实现.但那不是问题.我知道怎么做!如果我尝试编译main.cpp,我应该得到一个链接错误,这就是我得到的.问题是为什么它试图找到两次析构函数(下面的两行错误).

$g++ main.cpp 
/tmp/cckrdPCs.o: In function `main':
main.cpp:(.text+0x13): undefined reference to `GeneralTemplate<int>::GeneralTemplate()'
main.cpp:(.text+0x34): undefined reference to `void GeneralTemplate<int>::arbitraryFunction<double>(double const&)'
main.cpp:(.text+0x45): undefined reference to `GeneralTemplate<int>::~GeneralTemplate()'
main.cpp:(.text+0x61): undefined reference to `GeneralTemplate<int>::~GeneralTemplate()'
collect2: ld returned …
Run Code Online (Sandbox Code Playgroud)

c++ templates undefined-reference

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

C++中虚函数的编译时静态类型检查

背景

最近,我的一位同事遇到了一个问题,其中使用了旧版本的库头文件.结果是,为在C++中调用虚函数而生成的代码引用了类(vtable)的虚函数查找表中的错误偏移量.

不幸的是,在编译期间没有捕获到此错误.

所有普通函数都使用其错位名称进行链接,以确保链接器选择正确的函数(包括正确的重载变量).同样,可以想象一个目标文件或库可以包含有关Ctable类的vtable中的函数的符号信息.

有没有办法让C++编译器(比如说g++或Visual Studio)在链接期间检查对虚函数的调用?

这是一个简单的测试示例.想象一下这个简单的头文件和相关的实现:

Base.hpp:

#ifndef BASE_HPP
#define BASE_HPP

namespace Test
{
  class Base
  {
  public:
    virtual int f() const = 0;
    virtual int g() const = 0;
    virtual int h() const = 0;
  };

  class BaseFactory
  {
  public:
    static const Base* createBase();
  };
}

#endif
Run Code Online (Sandbox Code Playgroud)

Derived.cpp:

#include "Base.hpp"

#include <iostream>

using namespace std;

namespace Test
{
  class Derived : public Base
  { …
Run Code Online (Sandbox Code Playgroud)

c++ linker static-analysis virtual-functions one-definition-rule

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