小编xst*_*xst的帖子

请参阅我是协作者的存储库

我是私人仓库的合作者,但它并没有显示在我的存储库中.我也无法在其他用户的存储库列表中看到它,因为它是私有的.我已经确认我可以推/拉到回购.有没有办法使用Github访问此存储库而无需输入完整的URL?

github

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

为什么当JVM可以运行时,ant不能运行Main

class Main {
    public static void main(String[] args) {
        ....
    }
}
Run Code Online (Sandbox Code Playgroud)

通过shell启动程序:java Main按预期工作但通过ant启动程序:

<target name="run" depends="cmp">
    <java classname="Main" classpath="."/>
</target>`
Run Code Online (Sandbox Code Playgroud)

导致此错误:

java.lang.IllegalAccessException: Class org.apache.tools.ant.taskdefs.ExecuteJava can not access a member of class Main with modifiers "public static"
Run Code Online (Sandbox Code Playgroud)

JLS第12.3.3节符号引用的解决方案:

IllegalAccessError:遇到符号引用,指定字段的使用或赋值,或方法的调用,或类的实例的创建,包含引用的代码无法访问该类,因为该字段或方法是声明私有,受保护或默认访问(非公开),或者因为该类未声明为public.

所以org.apache.tools.ant.taskdefs.ExecuteJava无法执行该方法,因为它的封闭类是私有的,但是如果我使用私有方法启动jvm指向.class,它不会通过相同的安全机制?

这个问题很相似,但我还是不明白

java ant jvm

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

包括不工作的警卫

我已经定义了一个util.h文件,其中包含我想在几个不同的其他文件中使用的函数.这个标题有一个包含保护,但是当我在两个不同的文件中使用它时,我收到一个multiple definition of...错误.我究竟做错了什么?

我已经读过这个,但这与变量声明/定义有关. 这个答案似乎更相关,但我不清楚如何解决这个问题.

// util.h
// include lots of standard headers
#include ...

#ifndef UTIL_H
#define UTIL_H

using namespace std;
// multiple definition of `randarr(int, int, int)`
int* randarr(int size, int min, int max) {
    int *ret = new int[size];
    for (int i=0; i<size; i++)
            ret[i] = (int) (((double) rand() / RAND_MAX) * max) + min;
    return ret;
}
// no error
template<typename T> void printarr(T* v, int begin, int end) {
    for …
Run Code Online (Sandbox Code Playgroud)

c++ compiler-errors include

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

std :: map.insert"无法推断出...的模板参数"

我正在尝试熟悉STL库,但是我无法理解编译错误.我使用编译器错误字符串"无法推断出...的模板参数"搜索了其他问题,但没有一个答案显示适用或相关.

错误4错误C2784:'bool std :: operator <(const std :: unique_ptr <_Ty,_Dx>&,const std :: unique_ptr <_Ty2,_Dx2>&)':无法推断'const std ::的模板参数unique_ptr <_Ty,_Dx>&'from'const std :: string'c:\ program files(x86)\ microsoft visual studio 10.0\vc\include\xfunctional 125

我正在编写一个简单的解释器来计算一个变量中的导数/积分.我想要一个地图,用于将用户的输入与内部控制代码相匹配.键是trig(或其他)函数,int是控制代码.我正在使用单独的头文件来#define函数,但是对于这个例子,我只是使用整数文字.我正在使用Visual Studio:

#include <cstdio>
#include <map>
using namespace std;
int main(int argc, char** argv) {
    map< string, int > functions;
    functions.insert( pair<string, int>("sin", 1) );

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编辑:

在尝试了Serge的(有效的)答案之后:

functions.insert(std::make_pair(std::string("sin"), 1));
Run Code Online (Sandbox Code Playgroud)

我意识到了这个错误并尝试了这个:

pair<string, int> temp = pair<string,int>("cos",2);
functions.insert(temp);
Run Code Online (Sandbox Code Playgroud)

虽然这可能不是最理想的,但它说明了在插入地图之前没有构造配对对象的问题.

c++ stl map

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

模板类中构造函数的语法

我试图创建一个通用的循环缓冲模板,但有一些我无法理解的语法错误.错误在我的构造函数中,虽然看起来我已经以相同的方式参数化析构函数并且一个工作.我在Stroustrup C++中遵循了这个例子,他在范围解析运算符之前和函数名中使用了一个参数,就像我一样.我也确定没有循环依赖,因为我只编译一个文件.此外,实现和声明都在同一个文件(CircBuf.h)中,并且没有相应的.cpp文件,因此链接也不应成为问题.我已经尝试根据解决方案添加"内联"关键字,我得到相同的错误.

/* CircBuf.h */
template<typename T> class CircBuf {
  // don't use default ctor                                                                                                                                               
  CircBuf();

  int size;
  T *data;
public:
  CircBuf(int);
  ~CircBuf();
};

template<typename T> CircBuff<T>::CircBuf<T>(int i) {
  data = new T[i];
}
template<typename T> CircBuf<T>::~CircBuf<T>() {
  delete data;
}
Run Code Online (Sandbox Code Playgroud)

生成文件

all:
        g++ -g -pedantic CircBuf.h -o prog
Run Code Online (Sandbox Code Playgroud)

编译器错误

CircBuf.h:13:22: error: ‘CircBuff’ does not name a type
Run Code Online (Sandbox Code Playgroud)

c++ templates compiler-errors

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

eclipse中main()的返回值

如何在Eclipse中检查main函数的返回值?我已经搜索过了,用谷歌搜索了它,还搜索了CDT常见问题解答,但是我找不到任何东西。我目前正在使用CDT。

eclipse eclipse-cdt

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

用C++注释替换(单行)C注释

我如何使用sed将源文件中的所有C风格注释替换为C++风格.

所有这些:

int main() {
  /* some comments */
  ...
Run Code Online (Sandbox Code Playgroud)

至:

int main() {
  // some comments
  ...
Run Code Online (Sandbox Code Playgroud)

所有注释都是单行的,代码之间没有这样的注释:

int f(int x /*x-coordinate*/ );
Run Code Online (Sandbox Code Playgroud)

所以我试过这个:

 sed -i 's/ \/\* .*  \*\ / \/\/* /g' src.c
Run Code Online (Sandbox Code Playgroud)

但它保持文件不变. 这篇文章很相似,但我试图理解sed的表达式语法.自"." 匹配任何字符,"*"匹配某些模式的零个或多个.我假设".*"匹配任何数字的任何字符.

regex sed

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

GDB 中的 x86 标签和 LEA

我正在学习在 x86 程序集(目前为 32 位)中编码,我正在努力完全理解内存模型。特别令人困惑的是标签的语义、LEA 指令和可执行文件的布局。我编写了这个示例程序,以便我可以检查它在 gdb 中的运行情况。

; mem.s
SECTION .data
    msg: db "labeled string\n"
    db "unlabeled-string\n"
    nls: db 10,10,10,10,10,10,10,10
SECTION .text
global  _start
_start:
    ; inspect msg label, LEA instruction
    mov eax, msg
    mov eax, &msg
    mov eax, [msg]
    ; lea eax, msg (invalid instruction)
    lea eax, &msg
    lea eax, [msg]

    ; populate array in BSS section
    mov [arr], DWORD 1
    mov [arr+4], DWORD 2
    mov [arr+8], DWORD 3
    mov [arr+12], DWORD 4

    ; trying to print the …
Run Code Online (Sandbox Code Playgroud)

memory x86 assembly gdb nasm

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

服务器打印到stdout而不是socket

我正在研究UNIX网络编程中的示例,我在这里将"daytimeclientserv.c"改编为此代码.服务器按预期将日期/时间字符串发送到客户端,但启动时收到的第一个请求除外.当我第一次运行服务器程序(在LAN中的另一台计算机上)时,它会创建侦听套接字,绑定它然后等待连接.收到第一个请求后,它会将日期/时间字符串打印到其自己的标准输出(终端)而不是套接字,并且客户端程序将永远等待.但是,所有后续请求都会正确发送给客户端.使用gdb,我注意到connfd总是设置为零.它在第一个请求以及所有未来的请求上都设置为零.

我还有一些与此相关的问题:

  • 如果服务器侦听一个套接字(listenfd),然后使用connect()重新连接另一个套接字(connfd),那么客户端如何处理套接字的更改?我的理解是套接字由四个部分唯一标识:servIPaddr,servPort,clientIPaddr,clientPort

  • 如何在不成为root的情况下运行服务器(在Linux上)

  • 我怎样才能干净地关闭监听插座,以便我可以再次使用它.如果我使用SIGINT(Ctrl-C)退出服务器程序,则会出现绑定错误.到目前为止,我一直在使用gdb,并使用"call close(listenfd)"手动调用该函数.但如果我不使用gdb(即仅调试客户端应用程序),有没有办法做到这一点.

任何帮助是极大的赞赏.

#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <time.h>

#define BUFFER 80
int main(int argc, char **argv) {
  int listenfd, connfd;
  char buf[BUFFER];
  struct sockaddr_in servaddr;
  time_t ticks;
  struct sockaddr *ptr;
  char *ret;

  if ( (listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
    perror("socket error");
    return 1;
  }

  memset(&servaddr, 0, sizeof(servaddr));
  memset(buf, 0, BUFFER);
  servaddr.sin_family = AF_INET;
  servaddr.sin_port = htons(13);
  servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

  ptr = (struct sockaddr*) &servaddr;
  if ( …
Run Code Online (Sandbox Code Playgroud)

c sockets network-programming client-server

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

Mockito Internals

我试图了解Mockito的内部功能.到目前为止,我很难理解代码,而且我正在寻找关于Mockito基本工作的高级调查.

Mockito @ GrepCode

我写了一些示例代码来证明我目前的理解:

class C {
    String s;
    public void getS() { return s; }
    // ...
}

C cm = mock( C.class);
when( cm.method() ).thenReturn( "string value");
Run Code Online (Sandbox Code Playgroud)

据我所知,'mock'方法只能看到cm.getS()的返回值.怎么知道方法的名称是什么(为了存根)?另外,它如何知道传递给方法的参数?

mockito API方法调用内部对象的方法:

// org.mockito.Mockito
public static <T> OngoingStubbing<T> when(T methodCall) {
    return MOCKITO_CORE.when(methodCall);
}
Run Code Online (Sandbox Code Playgroud)

我已经将方法调用跟踪到几个不同的抽象,类和对象,但代码是如此分离,以至于很难理解这种方式.

//  org.mockito.internal.MockitoCore
public <T> OngoingStubbing<T> when(T methodCall) {
    mockingProgress.stubbingStarted();
    return (OngoingStubbing) stub();
}
Run Code Online (Sandbox Code Playgroud)

因此,如果有人了解内部或有一个讨论/博客文章的链接,请分享:)

testing unit-testing mocking internals mockito

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