小编Tad*_*zys的帖子

"未在此范围内声明"模板和继承错误

这是代码示例,它可以重现我的问题:

template <typename myType>
class Base {
public:
    Base() {}
    virtual ~Base() {}
protected:
    int myOption;
    virtual void set() = 0;
};

template <typename InterfaceType>
class ChildClass : public Base < std::vector<InterfaceType> >
{
public:
    ChildClass() {}
    virtual ~ChildClass() {}
 protected:
    virtual void set();
};

template <typename InterfaceType>
void ChildClass<InterfaceType>::set()
{
     myOption = 10;
}
Run Code Online (Sandbox Code Playgroud)

我的用法main():

ChildClass<int> myObject;
Run Code Online (Sandbox Code Playgroud)

我收到以下错误(ubuntu上的gcc 4.4.3):

'myOption'未在此范围内声明

如果我的ChildClass没有新的模板参数,这将工作正常,即:

class ChildClass : public Base < std::vector<SomeConcreteType> >
Run Code Online (Sandbox Code Playgroud)

编辑

如果我的set方法如下所示,我已设法解决它:

Base<std::vector<InterfaceType> >::myOption = 10;
Run Code Online (Sandbox Code Playgroud)

它工作正常.尽管不确定为什么我需要指定所有模板参数.

c++ inheritance templates compiler-errors g++

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

在centos上设置jenkins:ssh键和git的问题

经历了很多问题,但似乎没有什么能解决我的问题.或者更确切地说,我不确定我是否正确地做了整件事.所以这里是:

安装了centos 6.3 OS.然后我按照以下指南安装jenkins:

https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+RedHat+distributions

詹金斯工作正常.现在我正在尝试设置一个简单的构建作业,这需要克隆一个git存储库.(我已经安装了git插件)

在存储库URL中,我键入以下内容:git @ gitserver:myrepo.git当然我收到错误:stderr:主机密钥验证失败.

好的,我需要生成ssh密钥,一切都会好的.所以我做了以下事情:

su - jenkins
Run Code Online (Sandbox Code Playgroud)

但不幸的是它没有切换到jenkins用户.

cat/etc/passwd

显示以下内容:

jenkins:x:496:492:Jenkins Continuous Build Server:/var/lib/jenkins:/bin/false
Run Code Online (Sandbox Code Playgroud)

所以似乎它没有通常的主目录.

问题是我如何为jenkins生成密钥,或者如果上述步骤没有正确的方法,我该如何解决?

非常感谢!

更新:我生成了密钥(作为root用户)并将它们放在jenkins主页中并完全将公钥复制到git服务器.仍然没有帮助.

当我查看构建日志时,它说:

Started by user anonymous
Building in workspace /var/lib/jenkins/jobs/myrepo/workspace
Run Code Online (Sandbox Code Playgroud)

这个用户匿名是由jenkins创建的另一个用户,还是仍然运行命令的jenkins?

git ssh centos ssh-keys jenkins

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

使用 REST API 将实体插入谷歌云数据存储

尝试将 rest api 用于谷歌数据存储(不幸的是,没有用于 C++ 的客户端库)。在插入实体时卡住了。

阅读文档,不幸的是不是很好(至少对于 REST)。它没有说明 URI 是什么,所以我猜它是以下内容:

发布https://datastore.googleapis.com/v1/projects/ {projectId}:Entity

但不幸的是,我得到了答复:/v1/projects/my_project_id:Entity在此服务器上找不到请求的 URL 。

有人在/正在使用它吗?任何帮助,将不胜感激。谢谢!

google-cloud-datastore

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

RPM构建在安装部分失败

我正在尝试构建我的第一个rpm包,它是一个简单的可执行文件(mysh)。

我的规格文件:

Summary: bla <br>
Name: mysh <br>
Version: 1.0 <br>
Release: 1 <br>
Group: Applications <br>
Source: mysh-1.0.tar.gz <br>
URL: http://www.google.com <br>
Vendor: tadas sofware inc. <br>
Packager: tadas <br>
License: GPL 

%description <br>
a very good program!

%prep <br>
rm -rf $RPM_BUILD_DIR/mysh-1.0 <br>
zcat $RPM_SOURCE_DIR/mysh-1.0.tar.gz | tar -xvf -

%build <br>
make 

%install <br>
cp mysh /usr/local/bin/mysh

%files <br>
/usr/local/bin/mysh
Run Code Online (Sandbox Code Playgroud)

失败并显示以下错误:

cd: 8: can't cd to /home/tadzys/rpm/BUILDROOT/mysh-1.0-1.x86_64
Run Code Online (Sandbox Code Playgroud)

当然该文件不存在。我尝试将其复制到那里仍然存在相同的错误。不知道我的安装部分是否应将任何内容放到BUILDROOT文件夹中。

我在Ubuntu 11.04上。

linux ubuntu rpm rpmbuild

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

Linux上C++中线程/共享内存之间的线程安全数据交换

我对此感到困惑:在生产中,我们有两个进程通过共享内存进行通信,数据交换的一部分是漫长的,而且是一个bool.对此数据的访问不同步.它已经很好地工作了很长时间,现在仍然如此.我知道修改一个值不是原子的,但考虑到这些值被修改/访问了数百万次,这不得不失败?

这是一段代码示例,它在两个线程之间交换一个数字:

#include <pthread.h>
#include <xmmintrin.h>

typedef unsigned long long uint64;
const uint64 ITERATIONS = 500LL * 1000LL * 1000LL;

//volatile uint64 s1 = 0;
//volatile uint64 s2 = 0;
uint64 s1 = 0;
uint64 s2 = 0;

void* run(void*)
{
    register uint64 value = s2;
    while (true)
    {
        while (value == s1)
        {
        _mm_pause();// busy spin
        }
        //value = __sync_add_and_fetch(&s2, 1);
        value = ++s2;
    }
 }

 int main (int argc, char *argv[])
 {
     pthread_t threads[1];
     pthread_create(&threads[0], NULL, run, NULL); …
Run Code Online (Sandbox Code Playgroud)

c++ linux multithreading gcc atomic

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

对于无效输入,GetFileAttributes 返回 FILE_ATTRIBUTE_DIRECTORY

我对这段代码的行为感到困惑。

const char* file_name = "/  /";
auto attributes = GetFileAttributes(TEXT(file_name)); // same result without TEXT macro
if (attributes == INVALID_FILE_ATTRIBUTES)
{
  //error
}
else if (attributes == FILE_ATTRIBUTE_DIRECTORY)
{
  //directory
}    
Run Code Online (Sandbox Code Playgroud)

这是文件或目录的无效名称,因此我希望它返回 INVALID_FILE_ATTRIBUTES。用VS2015编译运行在win8上。也许这是因为前向字符?也许有一个 winAPI 函数来验证输入?

谢谢

c++ winapi

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

静态库接口中未公开的类的名称冲突(c ++)

我有两个静态库(a.libb.lib)内部,库a有类Foo,但它没有在任何公开可用的包含中公开.库b.lib也有类Foo,它也没有在接口中公开.这些类位于同一名称空间中,并具有相同的构造函数签名.

当我调试或运行可执行文件(使用两个库)时,我发现错误的类lib a而不是lib b创建.试图了解这是如何发生的.这是链接器问题吗?(即类名是相同的,链接器插入它先找到的任何东西)

c++ static-libraries visual-studio-2017

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