相关疑难解决方法(0)

在C++构造函数中引导下划线的含义是什么?

好吧我不是一个非常有经验的C++程序员,但我想知道下面的构造函数的参数中下划线的意义是什么?

class floatCoords
 {
 public:
  floatCoords(float _x, float _y, float _width, float _height)
   : x(_x), y(_y), width(_width), height(_height)
  {

  }
  float x, y, width, height;
  ...
Run Code Online (Sandbox Code Playgroud)

c++ syntax constructor arguments identifier

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

包含警卫的问题

当我为我的头文件添加一个包含Guard的Visual C++项目时,它给了我以下警告和错误:

警告C4603:'_ MAPTEST_H':未定义宏或预编译头使用后定义不同

将宏添加到预编译头,而不是在此处定义

.\ MapTest.cpp(6):使用预编译头**//预编译头stdafx.h包含在此行中

.\ MapTest.cpp(186):致命错误C1020:意外#endif

但是当我在include guard之前添加预编译头时,不会发出警告或错误.这是什么原因?

c++ visual-c++ inclusion

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

如何以特定模式读取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
查看次数

递归嵌套模板 - 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
查看次数

sizeof运算符为c&c ++返回不同的值?

全局定义字符数组,并在函数内定义具有相同名称的结构.为什么sizeof运算符为c&c ++返回不同的值?

char S[13];
void fun()
{
    struct S
    {
        int v;
    };
    int v1 = sizeof(S);
}
Run Code Online (Sandbox Code Playgroud)

//在C++中返回4,在C中返回13

c c++

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

重载运算符<<用于模板类

我有重载operator <<为模板类的问题.我使用的是Visual Studio 2010,这是我的代码.

#ifndef _FINITEFIELD
#define _FINITEFIELD
#include<iostream>

namespace Polyff{
    template <class T, T& n> class FiniteField;
    template <class T, T& n> std::ostream& operator<< (std::ostream&, const FiniteField<T,n>&);

    template <class T, T& n> class FiniteField {
    public:
            //some other functions
    private:
        friend std::ostream& operator<< <T,n>(std::ostream& out, const FiniteField<T,n>& obj);
        T _val;
    };

    template <class T, T& n>
    std::ostream& operator<< (std::ostream& out, const FiniteField<T,n>& f) {
        return  out<<f._val;
    }
    //some other definitions
}
#endif
Run Code Online (Sandbox Code Playgroud)

在主要我只是

#include"FiniteField.h"
#include"Integer.h"
#include<iostream>
using std::cout;
using …
Run Code Online (Sandbox Code Playgroud)

c++ templates operator-overloading visual-studio-2010 friend-function

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

找出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万
查看次数

关于包含带有警卫的头文件

我正在读一本关于Applied C++的书.

包含防护将阻止在编译源文件期间多次包含头文件.您的符号名称应该是唯一的,我们建议您根据文件名选择名称.例如,我们的文件cache.h包含这个包含保护.

#ifndef _cache_h_
 #define _cache_h_
 ...
 #endif // _cache_h_
Run Code Online (Sandbox Code Playgroud)

Lakos描述了使用冗余包含警卫来加速编译.见[Lakos96].对于大型项目,打开每个文件需要花费时间,但却发现已经定义了包含保护符号(即,文件已经包含在内).编译时间的影响可能是戏剧性的,当只使用标准的包含防护时,Lakos显示编译时间可能增加20倍.

[Lakos96]:LargeScale C++软件设计.

我没有Lakos96参考书来引用概念,所以在这里寻求帮助.

我对上述文字的疑问是

  1. 作者的意思是"对于大型项目,打开每个文件需要花费时间,但却发现已经定义了包含保护符号"?

  2. 作者的意思是"当标准包括使用警卫时"?

谢谢你的时间和帮助.

c++

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

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

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

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

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

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

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

wchar visual-c++

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