它是合法的指针到非const转换为指针到常量.
那么为什么将指向非const的指针转换为指向const的指针是不合法的呢?
例如,为什么以下代码是非法的:
char *s1 = 0;
const char *s2 = s1; // OK...
char *a[MAX]; // aka char **
const char **ps = a; // error!
Run Code Online (Sandbox Code Playgroud) 我正在尝试在RHEL 5 上为QGIS构建Python 2.6 .在制作QGIS期间,我收到以下错误:
Linking CXX shared library libqgispython.so
/usr/bin/ld: /usr/local/lib/python2.6/config/libpython2.6.a(abstract.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/python2.6/config/libpython2.6.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
make[2]: *** [src/python/libqgispython.so.1.0] Error 1
make[1]: *** [src/python/CMakeFiles/qgispython.dir/all] Error 2
make: *** [all] Error 2
Run Code Online (Sandbox Code Playgroud)
我从这个错误中得出的结论是,我需要用一些标志来构建Python 2.6 -fPIC.好的,所以我在configure.in文件中找到了它,但它检查了几个条件,并根据它分配-fPIC给CCSHARED标志的条件.
我所做的是,在检查所有条件后,我添加以下行以故意使用CCSHAREDas -fPIC.
CCSHARED="-fPIC";
Run Code Online (Sandbox Code Playgroud)
但它没有用..
如何在配置时指定我要设置CCSHARED …
内存泄漏的基本概念是代码执行期间新/删除操作的不匹配,可能是由于错误的编码实践,也可能是在跳过删除操作时出现错误的情况.
但最近我在一次采访中被问到一个问题,关于内存泄漏的其他方式.我没有答案.它是什么?
我指的是来自opensource项目tig的代码示例.这是一个很棒的工具!
文件:tig.c
我正在努力找到定义请求枚举的原因如下:
enum request {
#define REQ_GROUP(help)
#define REQ_(req, help) REQ_##req
/* Offset all requests to avoid conflicts with ncurses getch values. */
REQ_UNKNOWN = KEY_MAX + 1,
REQ_OFFSET,
REQ_INFO,
/* Internal requests. */
REQ_JUMP_COMMIT,
#undef REQ_GROUP
#undef REQ_
};
Run Code Online (Sandbox Code Playgroud)
甚至结构......
static const struct request_info req_info[] = {
#define REQ_GROUP(help) { 0, NULL, 0, (help) },
#define REQ_(req, help) { REQ_##req, (#req), STRING_SIZE(#req), (help) }
REQ_INFO
#undef REQ_GROUP
#undef REQ_
};
Run Code Online (Sandbox Code Playgroud)
可以看出REQ_GROUP已经#defined多次造成混乱..至少对我来说.我知道可能有一个很好的理由这样做..使用宏隐藏代码中的枚举/结构定义的实际原因是什么?
我在subversion控件下有一个目录.我创建了一个分支,只是为了测试合并的东西.我拿了一个文件,修改后备箱中的X行为"abc",并在其分支中修改了与"def"相同的X行.
然后,从分支工作目录我做了:
svn merge branchURL trunkURL .
Run Code Online (Sandbox Code Playgroud)
它更新了该文件,内容为该行号的"abc",即svn update如果我在同一个工作目录中完成它并且有人提交了" c",那么就不会给我一个相同行号的冲突.def"在存储库中.
那么svn merge在合并时只是替换内容而不会带来任何冲突吗?
如果是这样的话,当一个人不能以某种方式合并以便保持主干和分支的变化时,从主干分支出一个项目的原因将是无用的.
我正在尝试为 qgis 构建草插件..
当我尝试使用 cmake .. 配置后我收到以下错误..
CMake Error at CMakeLists.txt:78 (QT4_WRAP_UI):
Unknown CMake command "QT4_WRAP_UI".
Run Code Online (Sandbox Code Playgroud)
我已经安装了 Qt4、PyQt 和 python2.6。
谁能帮我弄清楚这里出了什么问题?
谢谢。
我正在使用Qprocess执行ping以检查主机是否在线...
问题是,无论是ping可达主机还是无法访问的主机,我从Qprocess->完成信号中接收的退出代码总是2.
我一直在QTimer中ping一个主机(我在Qt应用程序运行的客户端安装了一个文件夹)...
当我在连接到QProcess->完成信号的插槽中捕获ping返回的退出代码时,我总是收到退出代码为2 ..
我不能通过系统(ping)使用直接系统调用,因为它挂起我的应用程序ping时间是活动的...我希望它是异步的所以我切换到QProcess ...
以下是代码段:
//Pinging function called inside a timer with timout 1000
QString exec="ping";
QStringList params;
if(!dBool)
{
//params << "-c1 1.1.1.11 -i1 -w1;echo $?";
params <<" 1.1.1.11 -i 1 -w 1 -c 1";//wont ping
cout<<"\n\npinging 11 ie wont ping";
}
else
{
//params << "-c1 1.1.1.1 -i1 -w1;echo $?";
params <<" 1.1.1.1 -i 1 -w 1 -c 1";//will ping
cout<<"\n\npinging 1 ie will ping";
}
ping->start(exec,params);
// the slot that connects with QProcess->finished signal …Run Code Online (Sandbox Code Playgroud) 我正在通过cline进行C++ FAQ.它讨论了C++类如何比"C风格模块"更好.可以参考这里的文字.
但它没有讨论"C模块"究竟是什么.我在网上看了一些文字,但没有一个涉及这个主题.
谁能进一步解释这些概念?
请检查这个代码,它编译并运行绝对正常..问题是,当我开始学习c ++(turbo c ++)时,我从来没有能够声明任何类型的数组作为..
datatype var[variable_set_at_runtime];
Run Code Online (Sandbox Code Playgroud)
我理所当然地认为这在最新的gcc编译器中是不可能的......但令人惊讶的是这可能......
所以我的相关问题是,那么新运营商的需求是什么?
我知道new运算符可以执行很多操作,包括在堆中运行时动态分配内存,将地址返回给该资源......等等.
我觉得有什么不同,我的代码动态地在堆栈上分配内存,而新的代码在堆上运行?这是唯一的区别......
写完这样的东西后,我真的很惊讶,因为当我开始学习c ++时,我无法做到这一点......为了添加它,我也能为自定义数据类型做到这一点......: - O
#include<iostream>
using namespace std;
struct A
{
int a;
int b;
};
int main()
{
int a;
cin>>a;
int ch[a];
for(int i=0;i<a;i++)
ch[i]=i+1;
for(int i=0;i<a;i++)
cout<<"\n\nch=="<<ch[i];
A obj[a];
cin>>obj[a-1].a;
cin>>obj[a-1].b;
cout<<"\n\n obj.a,obj.b=="<<obj[a-1].a<<" , "<<obj[a-1].b;
}
Run Code Online (Sandbox Code Playgroud)
请说清楚..
谢谢.
刚才我接受了ca(Computer Associates)的C++开放采访.
问:有一个应用程序连续运行了几天......有一天它变得无响应/被绞死.你怎么调试/纠正应用程序.你的第一步是什么?
答:我首先回答...检查内存使用情况详细信息/ CPU使用情况.如果某些所需资源可用,则检查...或者如果它是网络绑定的,如果网络是实时的..等等.
问:他告诉......这些都是肤浅的东西......假设没有这样的问题......那么?
答:我告诉最好的方法是检查调试日志是否已启用..如果它们不是..给客户一个启用调试的应用程序并在现场测试它.因为应用程序是间歇性挂起的......很难通过任何其他方式检测为什么它会没有响应.调试日志会告诉我应用程序什么时候开始生气,因为找到根本原因的具体操作负责需要知道,调试日志是我认为最好的选择.
面试官转向另一个问题说..好吧.
那么,我的回答是否足够好.还有一个优秀的程序员会遵循的其他方法吗?
我需要将变量,列表和哈希传递给子例程,并从中获取更改而不返回。
此代码无法完成工作。
sub foo{
my $one = {$_[0]};
my @list = @{$_[1]};
my %hash = %{$_[2]};
print("\n inside foo: ${one}\n");
print("\n inside foo: $one @list $hash{'key'}\n");
$one = 2;
@list = (4,5,6);
my %hash2;
$hash2{'key'} = 'valueModified';
%hash = %hash2;
print("\n inside foo after Mod: $one\n");
print("\n inside foo after Mod: $one @list $hash{'key'}\n");
}
my $one = 1;
my @list = (1,2,3);
my %hash;
$hash{'key'} = 'value';
my @allLocalArgs = (\$one,\@list,\%hash);
foo(\@allLocalArgs);
print("\nafter foo modification: $one @list $hash{'key'}\n");
Run Code Online (Sandbox Code Playgroud)
输出: …
我需要将perl数组转换为单个字符串变量,其中包含用换行符分隔的所有数组项。
my $content = "";
@names=('A','C','C','D','E');
$content = $content . join($", @names) . "\n";
print $content;
Run Code Online (Sandbox Code Playgroud)
我打算将输出如下所示:
A
C
C
D
E
Run Code Online (Sandbox Code Playgroud)
但我得到:
A C C D E
Run Code Online (Sandbox Code Playgroud)
为什么不\n兑现换行符?