我想读取类似这样的txt文件的每一行
1190/2132 123/23123 45
我想读取整行,然后将它们存储在三个单独的字符串中,以备将来用于构建树.我现在正在使用fgets,但是在将它放入字符串时遇到错误.我该怎么办?
我正在使用预处理器宏来声明一些重复变量,具体来说:
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)
有没有办法做到这一点,所以我不必传递每个名称的大写和小写版本?
我意识到使用宏的打字并不多,但问题本身开始引起我的兴趣.
...../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) 我有以下代码段.
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(当然嵌套type的apply被省略,所以我们可以专注于结构本身).
在这种情况下,继承是用于绑定元函数返回值的标准设备.这个代码片段试图实现的是一个元函数类,在计算时递归地自我产生.
edit2:让我有点不同的相同片段:
template< typename T >
struct f
{
template< typename V > struct a; …Run Code Online (Sandbox Code Playgroud) back_inserter非常insert_iterator方便,但效率也很低!
例如,当您追加chars 时,每个元素都会产生大量开销copy,而在许多情况下,实际上并不需要如此。
有没有办法让他们更有效率?
我正在尝试实现一个简单的比较器,用于根据数组"_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中的两个(或更多)条目相等时随机化排序顺序.有帮助吗?
可能重复:
如何检测两个线段相交的位置?
确定两个线段是否相交?
给定两条线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) 你好!很长一段时间我很困惑!
很久很久以前,只有ansi版本就是atoi.
现在(很久以前)也有很多char版本.
但为什么宽字符版本在wtoi之前有一个uderline('_')?
谁能告诉我为什么?谢谢 :)
我正在尝试以下代码:
#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)
#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++中调用虚函数而生成的代码引用了类(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