Redian新闻
>
弱问C++一个问题 一直不解
avatar
弱问C++一个问题 一直不解# Programming - 葵花宝典
K*H
1
公司为我搬家花的钱,一部分包括在w2里了,一部分没有。
我的理解是,在w2里面的,相当于已经上过税了,所以我需要把这部分钱填在3903里面
,然后从1040的taxable income里面减掉,就能退税回来了,是不是这样呢?
多谢
avatar
f*n
2
就是为什么c++定义一个类要一个.h和一个.cpp呢?
.h定义一个方法,又要跑到cpp去写,有一段要重复的,多麻烦啊?
还有一个问题,如果定义了.h和.cpp
那么include的时候只需要用include"**.h"就可以了吗?
还需要include"**.cpp"吗?
大家见笑了啊
小白一个
avatar
x*g
3
co-ask.

【在 K*H 的大作中提到】
: 公司为我搬家花的钱,一部分包括在w2里了,一部分没有。
: 我的理解是,在w2里面的,相当于已经上过税了,所以我需要把这部分钱填在3903里面
: ,然后从1040的taxable income里面减掉,就能退税回来了,是不是这样呢?
: 多谢

avatar
l*s
4
generally no
avatar
f*n
5
写了一段程序试了一下
声明try.h:
#ifndef TRY_H_INCLUDED
#define TRY_H_INCLUDED
int add_two_number(int& a, int& b);
#endif // TRY_H_INCLUDED
然后是定义try.cpp:
#include "try.h"
int add_two_number(int& a, int& b)
{
return a+b;
}
然后是主程序:
#include "try.h"
#include
using namespace std;
int main()
{
int x1=1;
int x2=2;
int x3=add_two_number(x1, x2);
cout<cout<}
可以一直不能运行啊
但是在主程序中只有加了#include "try.cpp"才可以运行
这是怎么回事呢?
谢谢了
avatar
S*I
6
How do you compile your program?

【在 f******n 的大作中提到】
: 写了一段程序试了一下
: 声明try.h:
: #ifndef TRY_H_INCLUDED
: #define TRY_H_INCLUDED
: int add_two_number(int& a, int& b);
: #endif // TRY_H_INCLUDED
: 然后是定义try.cpp:
: #include "try.h"
: int add_two_number(int& a, int& b)
: {

avatar
t*n
7
windows/linux?

【在 f******n 的大作中提到】
: 写了一段程序试了一下
: 声明try.h:
: #ifndef TRY_H_INCLUDED
: #define TRY_H_INCLUDED
: int add_two_number(int& a, int& b);
: #endif // TRY_H_INCLUDED
: 然后是定义try.cpp:
: #include "try.h"
: int add_two_number(int& a, int& b)
: {

avatar
d*o
8
因为你只compile了主程序,没有compile并link try.cpp

【在 f******n 的大作中提到】
: 写了一段程序试了一下
: 声明try.h:
: #ifndef TRY_H_INCLUDED
: #define TRY_H_INCLUDED
: int add_two_number(int& a, int& b);
: #endif // TRY_H_INCLUDED
: 然后是定义try.cpp:
: #include "try.h"
: int add_two_number(int& a, int& b)
: {

avatar
d*o
9
简单地说,.h管定义,.cpp管实现
当B对A有dependency时,只需要找A.h里的定义就可以compile了,但如果程序要运行必
须得compile A.cpp,并link起来。
好处在于,A.h里只管定义,所以需要编辑的时候不多,如果A.h不变,编辑A.cpp后,
重新编译程序时,只compile A.cpp,B就不用compile了,只样节省了compile B的时间。
这在项目大的时候节省很多时间。

【在 f******n 的大作中提到】
: 就是为什么c++定义一个类要一个.h和一个.cpp呢?
: .h定义一个方法,又要跑到cpp去写,有一段要重复的,多麻烦啊?
: 还有一个问题,如果定义了.h和.cpp
: 那么include的时候只需要用include"**.h"就可以了吗?
: 还需要include"**.cpp"吗?
: 大家见笑了啊
: 小白一个

avatar
G*7
10

you can separate declaration and implementation into .h and .cpp. and that
makes sense if you collaborate with other programmers.
if you are entirely on your own, nothing stops you from writing a gigantic
main.cpp that has all the classes in it.
you could use ide tools such as visual assist x to generate the duplicated
function signatures.
yes, if you compile **.cpp and link against **.obj.
no, if you just compile your main.cpp.
sometimes you will, esp if templates are involved.

【在 f******n 的大作中提到】
: 就是为什么c++定义一个类要一个.h和一个.cpp呢?
: .h定义一个方法,又要跑到cpp去写,有一段要重复的,多麻烦啊?
: 还有一个问题,如果定义了.h和.cpp
: 那么include的时候只需要用include"**.h"就可以了吗?
: 还需要include"**.cpp"吗?
: 大家见笑了啊
: 小白一个

avatar
ns
11
声明,确切的说

间。

【在 d**o 的大作中提到】
: 简单地说,.h管定义,.cpp管实现
: 当B对A有dependency时,只需要找A.h里的定义就可以compile了,但如果程序要运行必
: 须得compile A.cpp,并link起来。
: 好处在于,A.h里只管定义,所以需要编辑的时候不多,如果A.h不变,编辑A.cpp后,
: 重新编译程序时,只compile A.cpp,B就不用compile了,只样节省了compile B的时间。
: 这在项目大的时候节省很多时间。

avatar
d*o
12
谢谢 ,改正过来了

【在 ns 的大作中提到】
: 声明,确切的说
:
: 间。

avatar
f*n
13
谢谢大家了
avatar
a*l
14
这不是一个节省时间的问题,想不节省都不成,不这么做就根本没办法link。

间。

【在 d**o 的大作中提到】
: 谢谢 ,改正过来了
avatar
d*o
15
.h .cpp只是文件后缀,没有任何现实意义,
全弄成cpp,然后include,就相当于把一个超 大的main分割成几个文件,根本没有
link的问题。

【在 a****l 的大作中提到】
: 这不是一个节省时间的问题,想不节省都不成,不这么做就根本没办法link。
:
: 间。

avatar
G*7
16
you could just include everything in a all_compile.cpp

【在 a****l 的大作中提到】
: 这不是一个节省时间的问题,想不节省都不成,不这么做就根本没办法link。
:
: 间。

avatar
a*n
17
可以只写一个cpp的呀,就是编译器来比较慢。
avatar
G*7
18
if you use a lot of template classes, a single file (compilation unit)
actually compiles faster, because the instantiation of duplicate templates
are curtailed. if you happen to have CGAL, notice they use this kind of "all
_compile.cpp" trick.
if you observe a slow down in release mode, that also makes sense: the
compile might be busy looking for opportunities to inline (a poor man's ltcg
essentially...).

【在 a***n 的大作中提到】
: 可以只写一个cpp的呀,就是编译器来比较慢。
avatar
a*e
19


【在 f******n 的大作中提到】
: 就是为什么c++定义一个类要一个.h和一个.cpp呢?
: .h定义一个方法,又要跑到cpp去写,有一段要重复的,多麻烦啊?
: 还有一个问题,如果定义了.h和.cpp
: 那么include的时候只需要用include"**.h"就可以了吗?
: 还需要include"**.cpp"吗?
: 大家见笑了啊
: 小白一个

avatar
a*e
20

原因大概2个
1. 如果implementation也放在header file里,同时很多其他文件都要include这个文
件,会导致严重redundancy,同样的代码出现很多次。(在cpp preprocess后)
2. 如果在cpp文件改变implementation,而declaration(header file里)不变,只需
要recompile cpp file。否则,所有include这个文件的所有file都要recompile,很浪
费资源和时间。

【在 f******n 的大作中提到】
: 就是为什么c++定义一个类要一个.h和一个.cpp呢?
: .h定义一个方法,又要跑到cpp去写,有一段要重复的,多麻烦啊?
: 还有一个问题,如果定义了.h和.cpp
: 那么include的时候只需要用include"**.h"就可以了吗?
: 还需要include"**.cpp"吗?
: 大家见笑了啊
: 小白一个

avatar
x*u
21
简单点说,就是和8x3文件名,640kb限制一样,属于历史遗留缺陷。

【在 a**********e 的大作中提到】
:
: 原因大概2个
: 1. 如果implementation也放在header file里,同时很多其他文件都要include这个文
: 件,会导致严重redundancy,同样的代码出现很多次。(在cpp preprocess后)
: 2. 如果在cpp文件改变implementation,而declaration(header file里)不变,只需
: 要recompile cpp file。否则,所有include这个文件的所有file都要recompile,很浪
: 费资源和时间。

avatar
h*n
22
.h加个extern改成
#ifndef TRY_H_INCLUDED
#define TRY_H_INCLUDED
extern int add_two_number(int& a, int& b);
#endif // TRY_H_INCLUDED
虽然是全局函数,但是默认只有自己的编译单元可见,加个extern才能在其他单元里面
使用
avatar
t*t
23
呃...看你吹捧C++, 原来水平不怎么样...第一个贴就错了.

【在 h*******n 的大作中提到】
: .h加个extern改成
: #ifndef TRY_H_INCLUDED
: #define TRY_H_INCLUDED
: extern int add_two_number(int& a, int& b);
: #endif // TRY_H_INCLUDED
: 虽然是全局函数,但是默认只有自己的编译单元可见,加个extern才能在其他单元里面
: 使用

avatar
c0
24
不算大错,DEFAULT搞反而已

【在 t****t 的大作中提到】
: 呃...看你吹捧C++, 原来水平不怎么样...第一个贴就错了.
avatar
z*y
25
the dot h dot c thing, really not big of a deal
fundamentally, compiler is not smart enough
or those who wrote compiler did not work hard enough
avatar
j*a
26
用static吧

【在 t****t 的大作中提到】
: 呃...看你吹捧C++, 原来水平不怎么样...第一个贴就错了.
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。