小编Aus*_*yde的帖子

在php中取消设置变量

我刚刚通过php手册阅读了未设置的变量.

php手册说 "unset()破坏了指定的变量"

这个def看起来很完美,直到我遇到静态变量...... "如果一个静态变量在函数内部未设置(),unset()仅在函数的其余部分的上下文中销毁变量.以下调用将恢复之前的变量的值."

至少,这个定义对我来说似乎不是一个好的定义,因为"销毁变量"意味着变量不再与该内存位置相关联.

是否还有其他人认为更好的定义是"unset()使变量超出当前范围"?我的意思是,不是指向终生,而是在这里使用单词范围更好?

php static unset

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

丢弃限定符错误

对于我的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_指向第一个节点的指针也是如此.

为什么我收到此错误?

c++

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

是否有更好的方法来转置PHP 2D数组?

根据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 arrays

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

将PHP fputcsv()生成的CSV值包装为""

因此,我的代码使用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

php csv

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

在QtCreator中使用cin

对于学校,我们使用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,如果重要的话.

c++ cin qt-creator

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

用于编程乐高NXT的C++ OOP库

前段时间,我在圣诞节期间获得了LEGO Mindstorms NXT,现在我想用C++编程.

我环顾四周,在这里和其他地方,找不到一个"感觉正确"的跨平台,开源,OOP C++库,包括lestat和nxtOSEK.

所以,我已经决定,除非我能找到一个我喜欢的,否则编写我自己的图书馆对我来说将是一次很棒的学习经历.

我做了一些研究,并决定通过蓝牙与它进行通信最简单,而不是将我的程序编译为NXT机器代码.

我也希望这能以OOP风格完成,这意味着NXT砖,电机,传感器等将作为对象存在.

所以,我的问题是:在开始这个之前我需要知道什么?我在哪里可以得到很好的参考(除了这里,特定于NXT)?对于像蓝牙通信这样的东西,还有哪些其他像样的"基础"库?

*顺便说一句,如果有必要的话,我全都是使用boost和STL.

或者,我相信如果我不需要重新发明轮子,所以如果有一个体面的C++ OOP蓝牙通信NXT库,请告诉我!

c++ lego nxt

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

C++,"老式"方式

我一直在学校学习C++来创建小型命令行程序.

但是,我只使用IDE构建了我的项目,包括VS08和QtCreator.

我理解其背后建设项目的过程:编译源代码的对象,然后将它们链接到一个可执行文件是平台特定的(.exe,.app,等).我也知道大多数项目也用于make简化编译和链接多个源文件和头文件的过程.

问题是,虽然IDE完成了所有这些工作,让生活变得简单,我真的不知道真正发生了什么,并且觉得我需要习惯于以"老式的方式"构建项目:从命令行,明确使用工具链.

我知道它是什么Makefile,但不知道如何写它们.
我知道什么gcc,但不知道如何使用它.
我知道链接器的功能,但不知道如何使用它.

我正在寻找的,无论是解释,还是链接到解释C++项目工作流程的教程,从首次编写代码到运行生成的可执行文件.

我真的想知道构建C++的内容,方法和原因.

(如果它有任何区别,我运行Mac OS X,使用gcc 4.0.1并制作3.81)

谢谢!

c++ build-process makefile toolchain

9
推荐指数
2
解决办法
1827
查看次数

QtCreator构建返回collect2:ld返回退出状态1

在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在构建之前并没有抱怨任何事情.

谢谢

c++ ld qt-creator

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

将矩形分成随机形状的多边形

就像标题所说的那样,我需要将矩形分成随机形状的多边形.

例如,有7个多边形:

+--------+--------+
|\       |   2    |
| \  1   |''--..__|
|  ------|  5     |
| 3  /   \________|
|   /    /\   6   |
|__/ 4  /  \______|
|      /  7       |
+-----+-----------+
Run Code Online (Sandbox Code Playgroud)

我不知道是否已有一个算法,但我似乎无法理解这一点.

我并不特别关心你回答的语言,但我将在Java/Swing中实现.

algorithm polygon shapes

8
推荐指数
2
解决办法
1772
查看次数

使用TCPServer的Ruby中的简单HTTP服务器

对于学校作业,我试图使用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)

ruby sockets http tcpserver

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

标签 统计

c++ ×5

php ×3

qt-creator ×2

algorithm ×1

arrays ×1

build-process ×1

cin ×1

csv ×1

http ×1

ld ×1

lego ×1

makefile ×1

nxt ×1

polygon ×1

ruby ×1

shapes ×1

sockets ×1

static ×1

tcpserver ×1

toolchain ×1

unset ×1