小编Jea*_*lho的帖子

如何使编译器不显示int到void指针强制转换警告

我有一些代码可以执行从int到void*的大量转换,反之亦然(我不在乎它是否丑陋.我喜欢通用的东西)

例:

typedef struct _List {
    long size;
    long mSize; // Max size
    void** elementArray;
}List;

List l;
...
int i = 2;
l.elementArray[i] = i; // Intentional usage of pointer as integer
// Actual size of pointer does not matter
Run Code Online (Sandbox Code Playgroud)

但是当我编译我得到一个bajillion

 warning: cast to 'void *' from smaller integer type 'int' [-Wint-to-void-pointer-cast]
Run Code Online (Sandbox Code Playgroud)

警告.是否有一面旗帜告诉gcc不打印此特定警告?

我正在和-Wall进行编译,所以我不确定我是否能够轻松地让它消失

c gcc void-pointers

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

C++ 如何防止编译器在调用函数时进行隐式转换?

这是交易:

当我有一个带有像这样的默认参数的函数时

int foo (int a, int*b, bool c = true);
Run Code Online (Sandbox Code Playgroud)

如果我错误地这样称呼它:

foo (1, false);
Run Code Online (Sandbox Code Playgroud)

编译器会将 false 转换为 int 指针并调用 b 指向 0 的函数。

我见过人们建议使用模板方法来防止隐式类型转换:

template <class T>
int foo<int> (int a, T* b, bool c = true);
Run Code Online (Sandbox Code Playgroud)

但这种方法太混乱并且使代码变得混乱。

有显式关键字,但它仅适用于构造函数。

我想要的是一种与显式方法类似的干净方法,这样当我声明该方法时,如下所示:

(keyword that locks in the types of parameters) int foo (int a, int*b, bool c = true);
Run Code Online (Sandbox Code Playgroud)

并这样称呼它:

foo (1, false);
Run Code Online (Sandbox Code Playgroud)

编译器会给我这个:

foo (1, false);
         ^
ERROR: Wrong type in function call (expected int* but got bool)
Run Code Online (Sandbox Code Playgroud)

有这样的方法吗?

c++ casting default explicit implicit

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

对多种文件类型使用`find`并替换找到的文件中的字符串

我试图以递归方式查找多种类型的文件,并在找到的每个文件中替换某个字符串.但是当我运行脚本时,它只能找到一种类型的文件.

我正在使用的命令行就是这个

find . -name '*.tcl' -o -name '*.itcl' -o -name '*.db' -exec sed -i 's/abc/cba/g' {} +
Run Code Online (Sandbox Code Playgroud)

每次我运行上面的命令时,它只找到类型的文件.db.当我用单个文件类型运行它时,它工作正常.

bash recursion sed find

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

Linux:如何在单个类型的所有文件中将字符串的所有实例替换为另一个实例

我想替换例如文件夹中所有.txt文件中包含的"123"和"321"的所有实例(递归).我想过这样做

sed -i 's/123/321/g' | find . -name \*.txt
Run Code Online (Sandbox Code Playgroud)

但在可能搞砸我的所有文件之前,我想问一下它是否有用.

linux replace sed find

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

如何:vhdl中的多维数组

我正在尝试用VHDL创建一个5维数组,但我不确定如何设置和初始化这些位.

这是我到目前为止:

    type \1-line\ is array (4 - 1 downto 0) of unsigned (32 - 1 downto 0);
    type square is array (4 - 1 downto 0) of \1-line\;
    type cube is array (4 - 1 downto 0) of square;
    type hypercube is array (4 - 1 downto 0) of cube;
    type \5-cube\ is array (4 - 1 downto 0) of cube;

    signal mega_array : \5-cube\;
    begin
        process (clock, reset) begin
                if (reset == '1') then
                        mega_array <= '0';
                end …
Run Code Online (Sandbox Code Playgroud)

arrays vhdl

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

如何在vhdl中将位分成不同的信号?

我有以下一行我要转换为vhdl的verilog代码:

assign   {cout,sum} = ( add ) ? ( in_a + in_b + cin ) : ( in_a - in_b - cin );
Run Code Online (Sandbox Code Playgroud)

我将如何在vhdl中执行此操作?

verilog concatenation vhdl bit

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

Xcode无法找到'std'命名空间

我有以下代码

#ifndef TPSO1_thread_h
#define TPSO1_thread_h

#define _XOPEN_SOURCE

#include <ucontext.h>

struct Thread_Greater;

class Thread {
    ...

    friend struct Thread_Greater;
    friend class Scheduler;
};


struct Thread_Greater : public std::binary_function <Thread,Thread,bool> {
    ...
};

#endif
Run Code Online (Sandbox Code Playgroud)

在.h文件中.问题是,当我尝试在xcode中编译它时,它说

#Error: use of undeclared identifier 'std'
Run Code Online (Sandbox Code Playgroud)

在线

struct Thread_Greater : public std::binary_function <Thread,Thread,bool> {
Run Code Online (Sandbox Code Playgroud)

有没有包含我遗失的内容?

c++ xcode ios

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

C++创建类似容器的类

我正在尝试创建一个应该定义图搜索算法行为的类.

该类接收一个通用容器作为模板参数,并根据容器进行操作

template <typename N, typename E, class Container>
class Frontier {
    private:
        Container frontier;

    public:
        bool isEmpty() { return this.frontier.empty(); }

        typename Graph<N, E>::const_iterator pop() { return this.frontier.pop(); }

        bool push(typename Graph<N, E>::const_iterator it) { return this.frontier.push(it); }
};
Run Code Online (Sandbox Code Playgroud)

但是当我尝试编译时我得到了

request for member ‘frontier’ in ‘this’, which is of non-class type 
Run Code Online (Sandbox Code Playgroud)

我知道这可以做到,因为stl容器是这样实现的

template<class T, Class C = deque<T> > class std::stack;
Run Code Online (Sandbox Code Playgroud)

我注意到了Class中的大写C,所以我尝试在实现中使用Class但是我从编译器中得到了"Class not defined".我怎么解决这个问题?

c++ containers templates

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

C++有没有办法获取模板类型?

我有一个像这样模板化的地图访问者

template <class Map> class MyVisitor : public MyMapVisitor<Map>;
Run Code Online (Sandbox Code Playgroud)

Map必须是std :: map

我想在其中有一个方法,我想创建一个存储在我的地图中的所有成员的列表:

std::vector <Map::*second_template_argument*> toList ();
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?因为我不允许更改MyMapVisitor超类但我可以更改MyVisitor子类.

c++ templates

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