小编zos*_*ska的帖子

运算符<< on template argument type member仅在clang中导致错误

我有这个例子:

#include <iostream>
#include <tuple>
#include <string>

template <typename T>
class A {
public:
    A(const T &t) : m_t(t) {}
    void foo() {
        std::cout << m_t << std::endl;
    }

private:
    T m_t;
};

typedef std::tuple<std::string, std::string> Type;
std::ostream &operator<<(std::ostream &os, const Type &t) {
    os << std::get<0>(t) << " " << std::get<1>(t);
    return os;
}

int main() {
    A<Type> a(Type{"ala", " ma kota"});
    a.foo();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

与clang ++(3.6)生成:

test_clang.cpp:10:19: error: call to function 'operator<<' that is neither visible in …
Run Code Online (Sandbox Code Playgroud)

c++ templates g++ language-lawyer clang++

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

共享库中的静态变量

我的问题是关于在共享库中创建的静态变量(静态void*)(让我们称之为'S'),但它是一个未在外面显示的内部变量,但API的每次调用都依赖于它.现在让我们考虑一个案例,当一个程序(让我们称之为主程序)链接到另外两个共享库,并且每个库都与库S链接.现在,对于我们的主程序,这个静态变量会发生什么?它有一个实例吗?二?

c linker static shared-libraries

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

C++模板难以理解的行为

首先 - 这段代码很糟糕,我知道,它是用于试验模板的,但我真的不知道它是如何/为什么它的工作原样.

代码:

#include <iostream>
#include <vector>
#include <string>

template <typename T>
class Container {
public:
    Container() { 
        std::cout << "Container()" << std::endl;
    }
    Container(const Container& other){
        std::cout << "Container(const Container& other)" << std::endl;
    }
    template <typename A>
    Container(const A& other) {
        std::cout << "Container(const A& other)" << std::endl;
    }
    Container(const std::vector<int>& other) { 
        std::cout << "Container(const std::vector<int>& other)" << std::endl;
    }
    ~Container() { 
        std::cout << "~Container()" << std::endl;
    }
};

int main(){
    Container<int> c1;
    Container<int> c2(c1);
    Container<int> c3(std::vector<int>()); …
Run Code Online (Sandbox Code Playgroud)

c++ templates

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

'main'通常是一个非静态函数ERROR

出现两个错误:main.c:80:警告:'main'通常是一个非静态函数main.c:88:错误:输入结束时预期的声明或语句我似乎无法找到问题......花括号的数量相等......似乎有什么问题?

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <getopt.h>
#include <string.h>
#include "main-getopt.h"


void print_usage_and_abort( const char *message )
{
    if( NULL != message )
        fprintf( stderr, "Error: %s\n", message );

    fprintf( stderr, "Usage: partitioner -n <nodes> [ -f <basename> ]\n\n" );
    exit( -1 );
}

void parsing (int argc, char **argv, struct Params *params)
{
    char error_message[256];

    params->nodes = 0;
    memcpy( params->filename_base, "output", strlen("output") + 1 );

    int opt;
    size_t len;
    int numarg;

    while ((opt = getopt(argc, argv, "n:f:")) …
Run Code Online (Sandbox Code Playgroud)

c linker getopt

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

如何在结构体内部设置/获取结构体的值

我如何访问我的结构以获取/设置其中的值?这是我的示例代码

#include <iostream>
using namespace std;
typedef struct t_TES
{
    double dTes;
}TES;

struct SAMPLE1
{
    struct TES;
};

int main()
{
    SAMPLE1 sss;
    //How can i get/set dtes value??
    sss.TES.dtes=10;
    cout<<sss.TES.dtes<<endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

是否可以像这样分配值“sss.TES.dtes=10”;并通过调用“sss.TES.dtes”来获取值;我已经尝试组合 -> 或 :: 运算符来获取/设置值,但总是出现编译错误。

请原谅我的英语不好,谢谢..

c++ struct

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

从地图检查范围的最佳方法

我目前有一个std::map<int,int> 像这样的价值观

Key Value
60   2
84   3 
99   5
Run Code Online (Sandbox Code Playgroud)

现在我总是从一个方法中得到一个int

int a = SomeMethod();
Run Code Online (Sandbox Code Playgroud)

我想要做的是检查该数字是否在密钥的范围之间,所以如果数字是45,那么它小于密钥值60,所以我应该回来2.另一个例子是如果数字比密钥值多75 60,小于关键值84,所以我应该回来3.我目前想到的方法是我有一个数字.我会遍历地图,直到遇到一个比我想要的更大的数字.如果它是我将它从地图中删除.然后继续这样做,直到我得到一个符合我的条件的数字.我想知道是否有更好的方法来解决这个问题?

c++ dictionary c++03

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