我刚刚通过php手册阅读了未设置的变量.
php手册说 "unset()破坏了指定的变量"
这个def看起来很完美,直到我遇到静态变量...... "如果一个静态变量在函数内部未设置(),unset()仅在函数的其余部分的上下文中销毁变量.以下调用将恢复之前的变量的值."
至少,这个定义对我来说似乎不是一个好的定义,因为"销毁变量"意味着变量不再与该内存位置相关联.
是否还有其他人认为更好的定义是"unset()使变量超出当前范围"?我的意思是,不是指向终生,而是在这里使用单词范围更好?
对于我的compsci类,我正在实现一个Stack模板类,但遇到了一个奇怪的错误:
Stack.h:在成员函数'
const T Stack<T>::top() const[with T = int]'中:Stack.cpp:10:错误:传递'
const Stack<int>' with T = int]的' 'as'this'参数void Stack<T>::checkElements()'丢弃限定符
Stack<T>::top() 看起来像这样:
const T top() const {
checkElements();
return (const T)(first_->data);
}
Run Code Online (Sandbox Code Playgroud)
Stack<T>::checkElements() 看起来像这样:
void checkElements() {
if (first_==NULL || size_==0)
throw range_error("There are no elements in the stack.");
}
Run Code Online (Sandbox Code Playgroud)
堆栈使用链接节点进行存储,first_指向第一个节点的指针也是如此.
为什么我收到此错误?
根据PHP手册,array_map使用NULL回调调用会导致它执行"zip"函数,从给定数组创建并行元素数组的数组.
例如:
array_map(NULL,array(1,2,3),array('a','b','c'));
Run Code Online (Sandbox Code Playgroud)
产量
array(array(1,'a'),array(2,'b'),array(3,'c'))
Run Code Online (Sandbox Code Playgroud)
这也相当于转置数组
array(array(1,2,3),array('a','b','c'))
Run Code Online (Sandbox Code Playgroud)
现在,看起来这是最接近的方式(使用内置函数),您可以转置数组,除了array_map采用数组列表,而不是数组数组.
在我正在研究的一些代码中,我需要转置一个数组数组,而不是数组列表,所以我做了这个解决方法:
call_user_func_array('array_map',array_merge(array(NULL),$array_of_arrays))
Run Code Online (Sandbox Code Playgroud)
然而,这感觉非常肮脏和笨拙.
所以我问:
除了自定义实现之外,还有更好的方法来使用PHP转置2D数组吗?
因此,我的代码使用PHP的内置fputcsv函数生成CSV文件.
对于分隔符,我使用','(逗号).
对于机箱,我使用'"'(双引号).
但是,当我尝试类似的东西时
fputcsv($file,array('a','b',"long string, with commas",NULL,''),',','"');
Run Code Online (Sandbox Code Playgroud)
它输出
a,b,"long string, with commas",,
Run Code Online (Sandbox Code Playgroud)
但我希望它输出
"a","b","long string, with commas","",""
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法可以解决这个问题,还是我必须为其替代fputcsv?
对于学校,我们使用C++作为首选语言.我目前正在使用QtCreator作为IDE,对于它的GUI库,它非常棒.学校正在使用Visual Studio.
但是,我们编写的大多数程序都使用cin和cout进行输入/输出.cout可以正常输出,因为你可以看到它在应用程序输出中输出的内容,但是没有办法提供给cin,好像它在控制台上,就像Visual Studio用于它的C++一样.
一个例子:
#include <iostream>
#include <string>
using namespace std;
int main() {
string name;
cout << "Enter name: ";
cin >> name;
cout << "Your name is " << name << endl;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在Visual Studio中使用控制台或提供cin输入?
我目前正在运行OS X Leopard,如果重要的话.
前段时间,我在圣诞节期间获得了LEGO Mindstorms NXT,现在我想用C++编程.
我环顾四周,在这里和其他地方,找不到一个"感觉正确"的跨平台,开源,OOP C++库,包括lestat和nxtOSEK.
所以,我已经决定,除非我能找到一个我喜欢的,否则编写我自己的图书馆对我来说将是一次很棒的学习经历.
我做了一些研究,并决定通过蓝牙与它进行通信最简单,而不是将我的程序编译为NXT机器代码.
我也希望这能以OOP风格完成,这意味着NXT砖,电机,传感器等将作为对象存在.
所以,我的问题是:在开始这个之前我需要知道什么?我在哪里可以得到很好的参考(除了这里,特定于NXT)?对于像蓝牙通信这样的东西,还有哪些其他像样的"基础"库?
*顺便说一句,如果有必要的话,我全都是使用boost和STL.
或者,我相信如果我不需要重新发明轮子,所以如果有一个体面的C++ OOP蓝牙通信NXT库,请告诉我!
我一直在学校学习C++来创建小型命令行程序.
但是,我只使用IDE构建了我的项目,包括VS08和QtCreator.
我理解其背后建设项目的过程:编译源代码的对象,然后将它们链接到一个可执行文件是平台特定的(.exe,.app,等).我也知道大多数项目也用于make简化编译和链接多个源文件和头文件的过程.
问题是,虽然IDE完成了所有这些工作,让生活变得简单,我真的不知道真正发生了什么,并且觉得我需要习惯于以"老式的方式"构建项目:从命令行,明确使用工具链.
我知道它是什么Makefile,但不知道如何写它们.
我知道什么gcc,但不知道如何使用它.
我知道链接器的功能,但不知道如何使用它.
我正在寻找的,无论是解释,还是链接到解释C++项目工作流程的教程,从首次编写代码到运行生成的可执行文件.
我真的想知道构建C++的内容,方法和原因.
(如果它有任何区别,我运行Mac OS X,使用gcc 4.0.1并制作3.81)
谢谢!
在QtCreator中构建多个不同的项目时,我遇到了以下构建错误:
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
在仅更改了一些内容(不应该更改构建中的任何重要内容)之后,如果它已经出现,它将会消失,或者如果它不存在则会出现.
在我目前的学校项目计划中,我正在尝试编译rock03.cpp.它是构建中唯一的文件,并且具有main()方法.我刚刚成功运行它,并回去改变某些if()s 的顺序,现在,我只得到两个相关的警告:
overriding commands for target 'rock03.o'
Run Code Online (Sandbox Code Playgroud)
和
ignoring old commands for target 'rock03.o'
Run Code Online (Sandbox Code Playgroud)
以及有问题的错误.
有谁知道为什么会这样?我似乎无法以任何合理的确定性重现错误,并且QtCreator在构建之前并没有抱怨任何事情.
谢谢
就像标题所说的那样,我需要将矩形分成随机形状的多边形.
例如,有7个多边形:
+--------+--------+
|\ | 2 |
| \ 1 |''--..__|
| ------| 5 |
| 3 / \________|
| / /\ 6 |
|__/ 4 / \______|
| / 7 |
+-----+-----------+
Run Code Online (Sandbox Code Playgroud)
我不知道是否已有一个算法,但我似乎无法理解这一点.
我并不特别关心你回答的语言,但我将在Java/Swing中实现.
对于学校作业,我试图使用Ruby和套接字库创建一个简单的HTTP服务器.
现在,我可以通过一个简单的问候来响应任何连接:
require 'socket'
server = TCPServer.open 2000
puts "Listening on port 2000"
loop {
client = server.accept()
resp = "Hello?"
headers = ["HTTP/1.1 200 OK",
"Date: Tue, 14 Dec 2010 10:48:45 GMT",
"Server: Ruby",
"Content-Type: text/html; charset=iso-8859-1",
"Content-Length: #{resp.length}\r\n\r\n"].join("\r\n")
client.puts headers
client.puts resp
client.close
}
Run Code Online (Sandbox Code Playgroud)
这按预期工作.但是,当我让服务器告诉我谁刚刚连接
puts "Client: #{client.addr[2]}"
Run Code Online (Sandbox Code Playgroud)
并使用Chromium(浏览器)连接localhost:2000/(只需一次),我得到:
Client: 127.0.0.1
Client: 127.0.0.1
Client: 127.0.0.1
Client: 127.0.0.1
Run Code Online (Sandbox Code Playgroud)
我假设这是Chromium请求辅助文件,favicon.ico而不是我的脚本做一些奇怪的事情,所以我想调查传入的请求.我换了resp = "Hello?"一行
resp = client.read()
Run Code Online (Sandbox Code Playgroud)
并重新启动服务器.我对Chromium的请求表示不满,而不是立即回来,它只是挂了.同时,我Client: 127.0.0.1在服务器输出中得到了输出.我点击了Chromium中的"停止"按钮,然后服务器崩溃了
server.rb:16:in `write': Broken pipe (Errno::EPIPE) …Run Code Online (Sandbox Code Playgroud)