小编Tah*_*lil的帖子

为什么我们必须转发声明一个类并在头文件中包含相应的头文件

嗨,我注意到如果我在头文件中包含头文件,.cpp那么我可以创建该头文件类的对象.就像如果我有A.hmain.cpp那我可以写A *a;main.cpp.但是,如果我在另一个头文件中包含头文件,然后尝试创建包含头文件的对象,则这不起作用.喜欢,

档案B.h:

#include "A.h"
class B
{
public:
    B(){};
    A *a;
};
Run Code Online (Sandbox Code Playgroud)

我必须添加类的前向声明A才能使它工作.为什么?

c++ class header-files forward-declaration

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

Openssl SSL_CTX_new(SSLv3_method())返回NULL

Linux版本来自 cat /proc/version

Linux版本3.6.11-4.fc16.i686(mockbuild @ bkernel02)(gcc版本4.6.3 20120306(Red Hat 4.6.3-2)(GCC))

来自openssl version命令:

OpenSSL 1.0.1g 2014年4月7日

首先,我使用REST API和cURL执行HTTP请求,以从服务器(线程1)获取一些配置.然后我创建一个TLS通道并通过该通道登录XMPP服务器(线程2).然后我尝试通过创建TLS通道(Thread3)登录到SIP服务器.但是TLS通道创建失败并出现此错误:

错误:140A90F1:SSL例程:SSL_CTX_new:无法加载ssl2 md5例程

SSL_library_init();
SSL_load_error_strings();
SSL_CTX* sslContext = SSL_CTX_new(SSLv3_method());
Run Code Online (Sandbox Code Playgroud)

sslContext是NULL.我在网上看到了大量关于此错误的错误报告和邮件,但无处可寻.我不知道它是否与cURL有关,但在很多情况下,人们在使用cURL时都会面临这个问题.

有关此错误,请参阅以下链接以了解其他人的帖子.

https://issues.apache.org/bugzilla/show_bug.cgi?id=56027

http://comments.gmane.org/gmane.comp.lib.boost.asio.user/2099

http://en.it-usenet.org/thread/17225/526/

http://curl.haxx.se/mail/curlphp-2009-01/0020.html

编辑:

评论的第一个命令的输出:

# openssl version -a                                                           
OpenSSL 1.0.1g 7 Apr 2014                                                      
built on: Tue Aug 12 10:07:53 BDT 2014                                         
platform: linux-generic32                                                      
options:  bn(64,32) rc4(ptr,char) des(idx,cisc,16,long) blowfish(ptr)          
compiler: /home/moshiur/Documents/Workspace/ph_SDKs/Untitled_Folder/ph
OPENSSLDIR: "/etc/ssl"


# ls /etc/ssl/                                                                 
certs        misc         openssl.cnf  private
Run Code Online (Sandbox Code Playgroud)

c++ linux curl openssl http

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

FFmpeg仅复制流时自动旋转视频

将mp4(人像)文件转换为mkv时遇到此问题。我正在使用的命令

ffmpeg -y -i test.mp4 -vcodec copy -acodec copy test.mkv

输出视频逆时针旋转90度。这是因为我认为辅助数据已被删除。

Side data: displaymatrix: rotation of -90.00 degrees

输入文件test.mp4信息

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2019-02-23T11:18:50.000000Z
    com.android.version: 8.0.0
  Duration: 00:00:25.86, start: 0.000000, bitrate: 12270 kb/s
    Stream #0:0(eng): Video: h264 (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720, 12005 kb/s, SAR 1:1 DAR 16:9, 30 fps, 30 tbr, 90k tbn, 180k tbc (default)
    Metadata:
      rotate          : 90
      creation_time   : 2019-02-23T11:18:50.000000Z
      handler_name …
Run Code Online (Sandbox Code Playgroud)

video android ffmpeg codec

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

将const char*返回char*然后更改数据

我对以下代码感到困惑:

string _str = "SDFDFSD";
char* pStr = (char*)_str.data();
for (int i = 0; i < iSize; i++)
    pStr[i] = ::tolower(pStr[i]);
Run Code Online (Sandbox Code Playgroud)

这里_str.data()回来了const char*.但是我们将它分配给一个char*.我的问题是,

_str.data()返回指向常量数据的指针.如何将它存储在指向数据的指针中?数据是不变的吗?如果我们将它分配给char指针而不是像我们在for语句中那样改变它,这对于常量数据是不可能的.

c++ pointers stdstring

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

如何在BB10中滚动实现GRID/TILED图像视图

我想实现GRID/TILED图像视图,其中瓦片图像将在下载后即时绘制.我希望能够在其中进行捏合/缩放和其他触摸操作.说,如果我平移视图,将完全或部分地加载和绘制视图上的新图块.我找不到使用任何现有UI控件的方法.此外,那些现有的UI控件不能被子类化,也没有任何paint()/ onDraw方法(如android中的view/canvas)来覆盖.可能是带有scrollview的imageView可以解决问题.另一个选项可能是使用外部窗口.在这两种情况下,我都不确定如何实现它们或在这些情况下如何处理手势.或者如果有其他方法可以执行它.请给我一些解决它的见解.

c++ blackberry-10

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

通过包含访问函数与声明静态

我有一个头文件,我想包含在另一个cpp文件中.我想知道如果我写这样的头文件有什么区别,

#include <iostream>
#include <string>
using namespace std;

string ret()
{
return "called";
}
Run Code Online (Sandbox Code Playgroud)

===================================

#include <iostream>
#include <string>
using namespace std;

static string ret()
{
return "called";
}
Run Code Online (Sandbox Code Playgroud)

ret()无论如何我都可以访问这个功能!那么,静态的用途是什么?

c++ oop static include

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

在执行glTexImage2D和glTexSubImage2D之前,是否需要调用glGenTextures和glBindTexture

嗨我有35张图像可以在显示屏上绘制.我在7X5网格中绘制它.图像从互联网下载.每次下载图像时,我都会尝试绘制整个35张图像.但其中一些还没有下载.所以我为他们画了一些默认的瓷砖.问题是每次下载图像我也会再次绘制先前绘制的图像.我想减少它.所以我在想做像Texture Atlas这样的事情.我想手动完成它.我是通过制作一个大图像glTexImage2D并添加子图像来实现的glTexSubImage2D.

glGenTextures(1, tex);
glBindTexture(GL_TEXTURE_2D, (*tex));
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexImage2D(GL_TEXTURE_2D, 0, textureImageInfo->format, textureImageInfo->texWidth, textureImageInfo->texHeight, 0, textureImageInfo->format, GL_UNSIGNED_BYTE, NULL);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, textureImageInfo->imageWidth, textureImageInfo->imageHeight, textureImageInfo->format, GL_UNSIGNED_BYTE, textureImageInfo->image);
Run Code Online (Sandbox Code Playgroud)

我打电话给35 glTexSubImage2D,将所有35张图片添加到一张大图片中glTexImage2D.在这里,我只写了一个以便于解释.然后我终于做到了

glEnable(GL_TEXTURE_2D);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);

glVertexPointer(3, GL_FLOAT, 0, this->tileCoordList); 
glTexCoordPointer(3, GL_FLOAT, 0, this->tileTextureCoordList);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisable(GL_TEXTURE_2D);
Run Code Online (Sandbox Code Playgroud)

现在我感到困惑的是,我是否需要生成和绑定纹理35次以进行35次调用glTexSubImage2D?或者只做一次就足够了.我不明白的实际问题是什么绑定纹理必须做任何事情.谢谢.

c++ opengl textures glteximage2d

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

VBO中的glVertexPointer、glTexCoordPointer中的stride是什么

您好,我在使用 VBO 绘图时遇到问题。所以我在这里问了一个问题。我找不到问题的答案。但通过讨论那里给出的一个答案,我现在有了另一个关于 VBO 中的进步的问题。我对它是什么和做什么感到困惑。

这里 我发现有人回答

如果你将所有顶点数据放在一个数组中(数组:读取为 malloc''ed 指针),将所有法线放在另一个数组中,等等。那么你的步幅为 0。例如,如果顶点、法线等存储如下:

[顶点0][顶点1][顶点2]...

[正常0][正常1][正常2]...

[texcoord0][texcoord1][texcoord2]...

如果你的顶点、法线等是这样包装的:

[顶点0][法线0][纹理坐标0][顶点1][法线1][纹理坐标1][顶点2][法线2][纹理坐标2]...

然后,您应该设置一个非空的步长,它对应于从一个元素切换到下一个元素所需的偏移量。(顺便说一下,这个步幅被计算为字节)

根据该解释,我认为步幅实际上意味着缓冲区中一个顶点的末端与另一个顶点的开始之间的距离。在第一种情况下它是 0,因为所有顶点都是连续存储的。纹理也是如此。但后来我在同一线程中读到了关于步幅定义的另一个答案。

关于 VBO 步幅往往会有些混乱,主要是因为它对 0 的特殊含义。

本文中的“步幅”是指内存中一个值的开头与内存中下一个值的开头之间的距离。它不是一个结尾与下一个开头之间的距离。因此,在作为结构数组的 VBO 中,该结构的每个元素的步长将是整个结构的大小。请记住,结构填充会影响这一点。

这只是与其他答案所说的相反。或者我对第一个答案的意思有误?任何人都可以帮我解决这个问题吗?如果有人能举例给出答案,我将非常感激。我在这个问题的开头给出了我的 VBO 实现的链接,但尚未解决。谢谢。

c++ opengl-es vbo stride blackberry-10

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

指向数组边界外的内存地址

我想知道是否访问其边界之外的数组(以下代码示例中的第2行)是否会产生错误?

int a[20];
int* ptr = &a[20]; // line 2
int count=20;
do
{
  ptr--;
  printf("%d",*ptr);
}while(--count!=0);
Run Code Online (Sandbox Code Playgroud)

c c++

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

如果值是素数还是不更快,我该如何计算?

我的程序在我的编译器中运行良好,但它显示在线竞赛编译器超出时间限制.
第一行输入将包含N =测试用例数.接下来N行将包含数字n作为测试用例,其中0 <= n <= 1000000000
这是我的代码.

   #include<stdio.h>
   void main()
   {   
   long t,n,i;
   int f = 0;
   scanf("%lu",&t);
   while(t--)
   {
       scanf("%lu",&n);
       f=0;
       if(n==0 || n==1)
       {
           printf("NOT PRIME\n");
       }
       else 
       {
       for(i=2;i<=n/2;i++)
       {
           if(n%i == 0)
           {
               printf("NOT PRIME\n");
               f =1;
               break;
            }
       }
       if(f==0)
       {
           printf("PRIME\n"); 
       }
   }
   }
}
Run Code Online (Sandbox Code Playgroud)

如何更快地执行此程序.帮我.提前致谢.

c algorithm

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